如何重新采样多索引数据帧内的数据

Sla*_*ast 5 datetime resampling dataframe python-3.x pandas

我有以下数据框:在此处输入图片说明

我需要重新采样数据来计算每周的 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

jez*_*ael 5

如果想先用重采样分组是必要的DatetimeIndex而已,所以加入 DataFrame.reset_index由各级无需先,然后分组和自定义功能重采样,因为pct_changeresample未实现:

def percent_change(x):
    return pd.Series(x).pct_change()
Run Code Online (Sandbox Code Playgroud)

另一个想法是使用 numpy 解决方案pct_change

def percent_change(x):
    return x / np.concatenate(([np.nan], x[:-1])) - 1
Run Code Online (Sandbox Code Playgroud)
df1 = (df.reset_index(level=[1,2,3])
        .groupby(['month', 'week'])['Adj Close']
        .resample('W')
        .apply(percent_change))
Run Code Online (Sandbox Code Playgroud)

这样每个月都会产生 4 个每周变化的值

所以似乎没有groupby,只有必要的下采样sum和链Series.pct_change

df2 = (df.reset_index(level=[1,2,3])
        .resample('W')['Adj Close']
        .sum()
        .pct_change())
Run Code Online (Sandbox Code Playgroud)