首页 > 解决方案 > 如何将聚合输出合并回原始数据框

问题描述

因此,对于方法的一般目的:

df= [['A' , 'B']] (dataframe is actually bigger but for simplicity)

SC = df[['A','B']].groupby('A').agg({'B': ['mean', 'std']})

我正在尝试将其输出恢复为原始输出,df因此输出可以是:

df=[['A','B','mean of B','std of B']]

我试过了:pd.merge(df, SC, on=None),得到错误:

“MergeError:没有要执行合并的通用列”

如果可能的话,任何帮助都将不胜感激。

谢谢

标签: pythonpandasdataframepandas-groupby

解决方案


分组变换

一种解决方案是执行两个groupby.transform计算:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0, 3, (50, 2)), columns=['A', 'B'])

df['mean'] = df.groupby('A')['B'].transform('mean')
df['std'] = df.groupby('A')['B'].transform('std')

print(df.head())

   A  B      mean       std
0  0  2  0.866667  0.915475
1  2  2  1.187500  0.910586
2  1  1  0.947368  0.911268
3  1  0  0.947368  0.911268
4  0  2  0.866667  0.915475

groupby 聚合 + 合并

或者,您可以执行单个groupby聚合。然后对齐索引并合并:

# grp dataframe is indexed by A
grp = df.groupby('A')['B'].agg(['mean', 'std'])

# set same index for df, perform merge on indices, then reset index
res = df.set_index('A')\
        .merge(grp, left_index=True, right_index=True)\
        .reset_index()

推荐阅读