【发布时间】:2021-03-27 19:57:15
【问题描述】:
以pandas DataFrame为例:
df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6],
"start": ["jan1", "jan1", "jan4", "feb17", "jan4", "mar3"],
"end": ["jan3", "jan3", "jan21", "feb17", "jan21", "mar4"],
"duration": [2, 2, 17, 0, 17, 1],
"case_id": ["case1", "case43", "case6", "case1", "case22", "case69"]
})
我想在 start、end 和 duration 列上使用 pandas groupby 操作来对数据框执行两个列表聚合:
- 每个组的
id值列表 - 每个组的
case_id值列表
我想要的输出如下所示:
start end duration ids cases
jan1 jan3 2 [1, 2] [case1, case43]
jan4 jan21 17 [3, 5] [case6, case22]
feb17 feb17 0 [4] [case1]
mar3 mar4 1 [6] [case69]
如何使用 pandas groupby 有效地做到这一点?
我知道如果我只需要一个聚合,我可以这样做:
df = df.groupby(['start', 'end', 'duration'])['id'].apply(list).to_frame()
如何为多个列表聚合执行此操作?如果有多种选择,什么是最耗时的? (我正在转换的 DataFrame 非常大)
【问题讨论】:
标签: python pandas pandas-groupby