python - 如何将聚合输出合并回原始数据框
问题描述
因此,对于方法的一般目的:
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:没有要执行合并的通用列”
如果可能的话,任何帮助都将不胜感激。
谢谢
解决方案
分组变换
一种解决方案是执行两个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()
推荐阅读
- r - 在ggplotly中使用facet_wrap时如何使面板名称适合一行?
- javascript - MongoDB 根据自定义 ID 更新/删除多个文档
- mongodb - 计算远程服务器上的 MongoDB 日志错误
- json - Power Query 显示 json 值
- python - 如何从列表中创建具有多个值的字典?
- typescript - 元组成员的映射类型
- vb.net - 为什么我的 vb.net 代码不会改变我的 Access2007 数据库
- reporting-services - 为什么我的系列值的标签会悬停在轴最大值上?
- python-3.x - 用未按预期工作的组的平均值填充缺失值
- c++ - 通过指针访问结构