按平均值执行分组,而不将行分组到 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
我正在尝试在 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