Python & Pandas:如何进行条件计算

3

df['direction'] 是风向的数字,范围从1到16。我想将其转换为360度系统#1 方向是 90#267.5,它们按顺时针方向运行。

我可以执行df['degree'] = 90-(df.direction-1)*22.5,但这会产生负值,您可以在下面看到输出 ![enter image description here]1

但我不知道如何在此处使用条件语句,对于df['degree']<0,则加上360。我该怎么做?

5个回答

6

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

这段代码是用来处理数据框中的“degree”列。它使用lambda函数对这一列进行操作,如果数值小于0,则加上360,否则保持不变。

1

如果我理解正确,您想要以下内容:

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

对不起,这不是 abs 函数,你只能进行 + 或 - 360 度的操作,50-50 是相当不同的。 - ZK Zhao
好的,您可以在生成列后使用布尔掩码来有条件地将360添加到负值。 - EdChum

1

解决问题的简单方法是使用模运算。

df['degree'] = (90-(df.direction-1)*22.5)%360

1
您可以使用 .loc 进行条件索引。
df.loc[ df.degree < 0 , 'degree'] += 360

0

使用 df[degree]<0 作为条件语句:

df[degree] += (df[degree]<0) * 360 

请解释您的代码是做什么的,以及为什么它可以解决问题。仅包含代码的答案(即使它能工作)通常不会帮助提问者理解他们的问题。 - SuperBiasedMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接