【发布时间】:2018-02-06 17:31:23
【问题描述】:
我想计算这个 DataFrame (frame_) 的每日百分比变化:
import pandas as pd
import numpy as np
data_ = {
'A':[1,np.NaN,2,1,1,2],
'B':[1,2,3,1,np.NaN,1],
'C':[1,2,np.NaN,1,1,2],
}
dates_ = [
'06/01/2018','05/01/2018','04/01/2018','03/01/2018','02/01/2018', '01/01/2018'
]
frame_ = pd.DataFrame(data_, index=dates_, columns=['A','B','C'])
问题是我用这个方法得到了一个 DataFrame:
returns_ = frame_.pct_change(periods=1, fill_method='pad')
dates,A,B,C
06/01/2018,,,
05/01/2018,,1.0,1.0
04/01/2018,1.0,0.5,
03/01/2018,-0.5,-0.6666666666666667,-0.5
02/01/2018,0.0,,0.0
01/01/2018,1.0,0.0,1.0
这不是我想要的。而且 dropna() 方法也没有给我我想要的结果。我想为没有价值或 NaN 的那一天计算一个价值和 NaN 的每一天的价值。例如,在 A 列:我希望看到的百分比变化
dates,A
06/01/2018,1
05/01/2018,
04/01/2018,1.0
03/01/2018,-0.5
02/01/2018,0.0
01/01/2018,1.0
在此先感谢
【问题讨论】:
-
为什么
df.pct_change(1, fill_method='pad')不是您想要的?因为第一个值? -
是的,我需要使用 06/01/2018 和 04/01/2018 的值来计算每日百分比变化。因此这种方法是不正确的。
-
如果我没有遗漏任何东西,
df.pct_change(1, fill_method='pad').fillna(df)应该可以工作吗? -
这行得通,谢谢你,ayhan