在不聚合的情况下对组应用操作

Applying operations on groups without aggregating

我想对一个数据框的多个组应用一个操作,然后用结果填充该组的所有值。让我们以 mean 和 np.cumsum 为例,以下数据框:

df=pd.DataFrame({"a":[1,3,2,4],"b":[1,1,2,2]})

看起来像这样

   a  b
0  1  1
1  3  1
2  2  2
3  4  2

现在我想按 b 对数据帧进行分组,然后在每组中取 a 的平均值,然后将 np.cumsum 应用于平均值,然后替换所有值a 由(组依赖)结果。

对于前三个步骤,我会这样开始

df.groupby("b").mean().apply(np.cumsum)

这给出了

   a
b   
1  2
2  5

但是我想得到的是

   a  b
0  2  1
1  2  1
2  5  2
3  5  2

有什么好的方法可以解决这个问题吗?

您可以通过 Series:

使用 map
df1 = df.groupby("b").mean().cumsum()
print (df1)
   a
b   
1  2
2  5

df['a'] = df['b'].map(df1['a'])
print (df)
   a  b
0  2  1
1  2  1
2  5  2
3  5  2