python - 熊猫 agg 和 listagg 同时
问题描述
我想AGG
对 columnB
和进行操作C
,同时LISTAGG
在 column 上使用D
。
目前我做groupby
了两次 - 一次LISTAGG
和一次AGG
- 之后我加入了两个结果数据帧。
我想知道是否可以在同一个调用中同时执行LISTAGG
和AGG
操作groupby
?
最小的例子:
import pandas as pd
df = pd.DataFrame( {'A' : [1, 1, 1, 1, 2, 2, 3]
, 'B' : [10, 12, 11, 10, 11, 12, 14]
, 'C' : [22, 20, 8, 10, 13, 10, 0]
, 'D' : ['x', 'y', 'y', 'z', 'w', 'v', 'k' ]
})
print(df)
df_listagg = df.groupby(['A'])['D'].apply(list).reset_index(name='D_listagg')
print(df_listagg)
df_agg = df.groupby(['A']).agg({'B': 'sum', 'C': 'min'}).reset_index()
print(df_agg)
df_result = pd.merge(df_listagg, df_agg, on=['A'], how='left')
print(df_result)
结果数据框:
A D_listagg B C
0 1 [x, y, y, z] 43 8
1 2 [w, v] 23 10
2 3 [k] 14 0
解决方案
只需在聚合中包含“D”列:
df=df.groupby('A',as_index=False).agg({'B': 'sum', 'C': 'min','D':list})
df的输出:
A B C D
0 1 43 8 [x, y, y, z]
1 2 23 10 [w, v]
2 3 14 0 [k]
推荐阅读
- scala - 将 Scala 反射 MethodMirror 转换为 Scala 函数
- mysql - 基于加入条件的条件 INNER JOIN 或 LEFT JOIN
- azure - 使用 Azure AD Auth 和 Web 应用 API 进行多租户
- python - SQLAlchemy 插入未反映在远程数据库中
- javascript - PHP - for 循环应该只执行一次前缀
- go - 函数中结构的指针和引用
- python - 如何立即更新 Python 3 中函数内的全局变量?
- mbed - 串行读取非空终止输入?
- hadoop - Apache Pig:在 Pig 中处理数据类型时面临问题
- .net - 如果在特定频道 Discord.net 中找到消息