将 groupby rolling sum 与原始 pandas DataFrame 合并

Recombine groupby rollling sum with original pandas DataFrame

我有一个 pandas DataFrame 的形式:

import pandas as pd

df = pd.DataFrame({
    'a': [1,2,3,4,5,6],
    'b': [0,1,0,1,0,1]
})

我想按 'b' 的值对数据进行分组并添加新列 'c',其中包含每个组的 'a' 的滚动总和,然后我想重新组合所有这些组返回到包含 'c' 列的未分组的 DataFrame 中。我已经达到:

for i, group in df.groupby('b'):
    group['c'] = group.a.rolling(
        window=2,
        min_periods=1,
        center=False
    ).sum()

但是这种方法存在几个问题:

如果必须使用 groupby,那么您可以使用 groupby.apply 来一次性计算所有内容:

df['c'] = df.groupby('b')['a'].apply(lambda x: x.rolling(2, min_periods=1).sum())

v0.19.1开始,您可以直接调用groupby对象的rolling()/expanding()方法,如下所示:

df['c'] = df.groupby('b').rolling(2, min_periods=1)['a'].sum().sortlevel(1).values

两者都给你:-

df