按平均值执行分组,而不将行分组到 pandas 中的单个输出行

Perform group by average without grouping rows into a single output row in pandas

我正在尝试在 pandas 中执行与 postgreSQL 的 WINDOW 功能等效的功能。基本上,我想对特定组中的列值进行平均,并使用结果创建一个新列,而不将行分组到单个输出行中。

这是一个例子:

data = pd.DataFrame(
'name': ['Steve', 'Jim', 'Anna', 'Susie', 'Greg', 'John', 'Sabrina'],
'salary': [100, 200, 300, 100, 250, 90, 260],
'department': ['Finance', 'Finance', 'HR', 'Finance', 'Operations', 'HR', 
'Operations']
})

我可以将薪水分组并平均

data.groupby('department').agg('mean')

然后左合并结果与原始数据。

最终结果应包含所有行和列 'name'、'department' 和 'avg salary by department'。

我想知道是否有更快更优雅的方法。

听起来你需要transform

df['Mean']=df.groupby('department').transform('mean')
df
Out[656]: 
   department     name  salary        Mean
0     Finance    Steve     100  133.333333
1     Finance      Jim     200  133.333333
2          HR     Anna     300  195.000000
3     Finance    Susie     100  133.333333
4  Operations     Greg     250  255.000000
5          HR     John      90  195.000000
6  Operations  Sabrina     260  255.000000