pandas 如果该列为真,则对该行执行百分比更改
pandas if column is true, perform percent change on that row
我有一个 df,其中包含基于条件语句的附加布尔值列。
df = pd.DataFrame({'col1': [1,2,3,2.5,5,2]})
df['bool'] = df['col1'] >= 3
df 看起来像...
col bool
0 1.0 False
1 2.0 False
2 3.0 True
3 2.5 False
4 5.0 True
5 2.0 False
如果“bool”为真,如果为假,我想得到“col1”的 pct_change()
return NaN。输出应该类似于...
col pct_change
0 1.0 NaN
1 2.0 NaN
2 3.0 -0.169
3 2.5 NaN
4 5.0 -0.400
5 2.0 NaN
解决这个问题的最佳方法是什么?
使用numpy.where
将df["bool"]
用作布尔掩码:
df["pct_change"] = np.where(df["bool"], df["col"].pct_change().shift(-1), np.nan)
print(df)
输出:
col bool pct_change
0 1.0 False NaN
1 2.0 False NaN
2 3.0 True -0.166667
3 2.5 False NaN
4 5.0 True -0.400000
5 3.0 False NaN
我有一个 df,其中包含基于条件语句的附加布尔值列。
df = pd.DataFrame({'col1': [1,2,3,2.5,5,2]})
df['bool'] = df['col1'] >= 3
df 看起来像...
col bool
0 1.0 False
1 2.0 False
2 3.0 True
3 2.5 False
4 5.0 True
5 2.0 False
如果“bool”为真,如果为假,我想得到“col1”的 pct_change()
return NaN。输出应该类似于...
col pct_change
0 1.0 NaN
1 2.0 NaN
2 3.0 -0.169
3 2.5 NaN
4 5.0 -0.400
5 2.0 NaN
解决这个问题的最佳方法是什么?
使用numpy.where
将df["bool"]
用作布尔掩码:
df["pct_change"] = np.where(df["bool"], df["col"].pct_change().shift(-1), np.nan)
print(df)
输出:
col bool pct_change
0 1.0 False NaN
1 2.0 False NaN
2 3.0 True -0.166667
3 2.5 False NaN
4 5.0 True -0.400000
5 3.0 False NaN