首页 > 解决方案 > 熊猫 agg 和 listagg 同时

问题描述

我想AGG对 columnB和进行操作C,同时LISTAGG在 column 上使用D

目前我做groupby了两次 - 一次LISTAGG和一次AGG- 之后我加入了两个结果数据帧。

我想知道是否可以在同一个调用中同时执行LISTAGGAGG操作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

标签: pythonpandas

解决方案


只需在聚合中包含“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]

推荐阅读