可以做大熊猫groupby变换滚动平均值吗?

use*_*780 1 pandas

熊猫有可能做类似的事情吗?

df.groupby("A").transform(pd.rolling_mean,10)
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 5

您可以在不使用transform或的情况下执行此操作apply

df = pd.DataFrame({'grp':['A']*5+['B']*5,'data':[1,2,3,4,5,2,4,6,8,10]})
df.groupby('grp')['data'].rolling(2, min_periods=1).mean()
Run Code Online (Sandbox Code Playgroud)

输出:

grp   
A    0    1.0
     1    1.5
     2    2.5
     3    3.5
     4    4.5
B    5    2.0
     6    3.0
     7    5.0
     8    7.0
     9    9.0
Name: data, dtype: float64
Run Code Online (Sandbox Code Playgroud)

每个评论的更新:

df = pd.DataFrame({'grp':['A']*5+['B']*5,'data':[1,2,3,4,5,2,4,6,8,10]}, 
                  index=[*'ABCDEFGHIJ'])
df['avg_2'] = df.groupby('grp')['data'].rolling(2, min_periods=1).mean()\
                .reset_index(level=0, drop=True)
Run Code Online (Sandbox Code Playgroud)

输出:

  grp  data  avg_2
A   A     1    1.0
B   A     2    1.5
C   A     3    2.5
D   A     4    3.5
E   A     5    4.5
F   B     2    2.0
G   B     4    3.0
H   B     6    5.0
I   B     8    7.0
J   B    10    9.0
Run Code Online (Sandbox Code Playgroud)