带有groupby的熊猫数据框滚动窗口

Posted

技术标签:

【中文标题】带有groupby的熊猫数据框滚动窗口【英文标题】:pandas dataframe rolling window with groupby 【发布时间】:2017-04-03 17:38:45 【问题描述】:

我可以添加一个新列c,它是b 中最后两个值的总和,如下所示...

df['c'] = df.b.rolling(window = 2).sum().shift()

df
    a   b     c
0   1   3   NaN
1   1   0   NaN
2   0   6   3.0
3   1   0   6.0
4   0   0   6.0
5   1   7   0.0
6   0   0   7.0
7   0   7   7.0
8   1   4   7.0
9   1   2   11.0

...但是,如果我想先按a 分组怎么办?例如。我可以这样做:

df['c'] = df.groupby(['a'])['b'].shift(1) + df.groupby(['a'])['b'].shift(2)

有没有更优雅的方法来对组中的大量移位(1、2、...n)求和?

【问题讨论】:

【参考方案1】:
f = lambda x: x.rolling(2).sum().shift()
df['c'] = df.groupby('a').b.apply(f)

df

【讨论】:

警告:在 lambda 函数中结合 rolling() 和 shift() 方法(就像 piRSquared 呈现的方式)是必要的:它会导致 both 应用于组(理想);在这种情况下会出现不正确的行为:df['c'] = df.groupby('a').b.rolling(2).sum().shift() 因为 shift() 操作发生在非分组上下文中 抱歉,我希望我没有添加混淆:我的意思是说您的方法是正确的,以及另一种方法,这似乎是一种句法偏好,会导致意想不到的行为

以上是关于带有groupby的熊猫数据框滚动窗口的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框,对滚动窗口中的任何列进行计算

如何正确使用带有应用功能的熊猫 groupby 来解决副作用? (第一组申请两次)

groupby - python 熊猫数据框

Seaborn通过多个groupby绘制熊猫数据框

groupby之后的熊猫数据框列[重复]

多索引上的熊猫数据框 groupby