df['direction'] ist die Anzahl der Windrichtungen im Bereich von 1-16. Ich möchte es in 360-degree system konvertieren. #1 Richtung ist 90 und #2 ist 67.5, sie laufen im Uhrzeigersinn.

Ich kann df['degree'] = 90-(df.direction-1)*22.5 machen, aber dies würde negative value erzeugen. Sie können die Ausgabe unten sehen ! [Bildbeschreibung hier eingeben] 1

Aber ich weiß nicht, wie ich das conditional hier für df['degree']<0, then + 360 verwenden soll. Wie kann ich das machen?

3
cqcn1991 7 Aug. 2015 im 11:07

5 Antworten

Beste Antwort

df['degree'] = df['degree'].apply(lambda x: x + 360 if x < 0 else x)

5
DeepSpace 7 Aug. 2015 im 08:10

Verwenden Sie df [Grad] <0 als Bedingungsanweisung:

df[degree] += (df[degree]<0) * 360 
0
hvedrung 7 Aug. 2015 im 08:52

Ein kurzer Weg, um Ihr Problem zu lösen, ist die Verwendung von Modulo.

df['degree'] = (90-(df.direction-1)*22.5)%360
1
zuku 7 Aug. 2015 im 08:26

Sie können .loc für die bedingte Indizierung verwenden

df.loc[ df.degree < 0 , 'degree'] += 360
1
dermen 7 Aug. 2015 im 08:17

Wenn ich das richtig verstehe, möchten Sie Folgendes:

In [36]:

df = pd.DataFrame({'direction':np.random.randint(1,17,20)})
df
Out[36]:
    direction
0          13
1          12
2           4
3           5
4          16
5           6
6           3
7          16
8          12
9           2
10         14
11         13
12          8
13          9
14          8
15         12
16          9
17          2
18          7
19          8
In [37]:

df['degrees'] = (90 - (df['direction'] -1) * 22.5)
df.loc[df['degrees']<0,'degrees'] += 360.0
df
Out[37]:
    direction  degrees
0          13    180.0
1          12    202.5
2           4     22.5
3           5      0.0
4          16    112.5
5           6    337.5
6           3     45.0
7          16    112.5
8          12    202.5
9           2     67.5
10         14    157.5
11         13    180.0
12          8    292.5
13          9    270.0
14          8    292.5
15         12    202.5
16          9    270.0
17          2     67.5
18          7    315.0
19          8    292.5
1
EdChum - Reinstate Monica 7 Aug. 2015 im 08:18