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.wheredf["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