看看这些,他们并没有真正回答我的问题:
我有一个很大的DataFrame,并且希望计算每一列的pct_change()
。我希望结果跳过nan值,这样它就相当于:
for i in df.columns:
_pct = df[i].dropna().pct_change()
然后,对于原始值为nan的行,pct_change()
值也将是nan。换句话说,如果我有:
price = [1, nan, 1.1, 1.155, nan, 1.0395]
我要:
pct_change = [nan, nan, 0.1, 0.05, nan, -0.1]
是否有内置的方法来完成此操作,还是必须创建自己的循环来完成,即遍历每一列,执行pct更改,然后将值替换为nan?
谢谢
发布于 2022-09-12 16:53:46
我认为您可以在列中使用pct_change
,然后屏蔽这些单元格,如下所示
df.pct_change().where(df.notna())
举例说明:
nan = np.nan
df = pd.DataFrame({
'price': [1, nan, 1.1, 1.155, nan, 1.0395],
'price2': [1, nan, nan, 1.155, nan, 1.0395]
})
print(df.pct_change().where(df.notna()))
# price price2
# 0 NaN NaN
# 1 NaN NaN
# 2 0.10 NaN
# 3 0.05 0.155
# 4 NaN NaN
# 5 -0.10 -0.100
https://stackoverflow.com/questions/73692605
复制相似问题