我有以下数据框:
我需要重新采样数据来计算每周的 pct_change()。我怎样才能获得每周的变化?
类似 data['pct_week'] = data['Adj Close'].resample('W').ffill().pct_change()
但是数据需要分组data.groupby(['month', 'week'])
这样每个月都会产生 4 个每周变化的值。然后我可以绘制
我所做的是df['pct_week'] = data['Adj Close'].groupby(['week', 'day']).pct_change()
但我收到此错误 TypeError: 'type' object does not support item assignment
最佳答案
如果想先用 resample 分组是必要的 DatetimeIndex
只有,所以添加
DataFrame.reset_index
通过所有级别而不先,然后使用自定义函数进行分组和重新采样,因为 pct_change
为 resample
未实现:
def percent_change(x):
return pd.Series(x).pct_change()
另一个想法是对
pct_change
使用 numpy 解决方案:def percent_change(x):
return x / np.concatenate(([np.nan], x[:-1])) - 1
df1 = (df.reset_index(level=[1,2,3])
.groupby(['month', 'week'])['Adj Close']
.resample('W')
.apply(percent_change))
this way every month would yield 4 values for weekly change
所以似乎没有
groupby
,只需要像 sum
这样的下采样和链 Series.pct_change
:df2 = (df.reset_index(level=[1,2,3])
.resample('W')['Adj Close']
.sum()
.pct_change())
关于python-3.x - 如何重新采样多索引数据帧内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696776/