我有这个数据框:
df1 = pd.DataFrame([
{ 'id': 1, 'spend': 60, 'store': 'Stockport' },
{ 'id': 2, 'spend': 68, 'store': 'Didsbury' },
{ 'id': 3, 'spend': 70, 'store': 'Stockport' },
{ 'id': 4, 'spend': 35, 'store': 'Didsbury' },
{ 'id': 5, 'spend': 16, 'store': 'Didsbury' },
{ 'id': 6, 'spend': 12, 'store': 'Didsbury' },
])
我已按商店进行了分组,并按商店获得了总支出:
df.groupby("store").agg({'spend': 'sum'})\
.reset_index().sort_values("spend", ascending=False)
store spend
Didsbury 131
Stockport 130
有没有一种方法可以获取每个商店的ID作为分组对象中的一列?就像Postgres中的ARRAY_AGG
一样?因此,所需的输出将是:
store spend ids
Didsbury 131 [2,4,5,6]
Stockport 130 [1,3]
答案 0 :(得分:3)
我们可以使用named_aggregations
,这是自pandas >= 0.25.0
起可用的一种聚合方法。
注意如何立即将列重命名为“ ids”:
df1.groupby('store').agg(
spend=('spend', 'sum'),
ids=('id', list)
).reset_index()
store spend ids
0 Didsbury 131 [2, 4, 5, 6]
1 Stockport 130 [1, 3]
答案 1 :(得分:1)
您可以将var b = ...
之类的聚合函数传递给list
列:
id