【发布时间】:2018-03-28 22:11:07
【问题描述】:
给定一个数据框,将列的每组的值折叠成一个集合很简单:
df.groupby('A')['B'].apply(set)
但是,如果您想在多列上执行此操作并且结果要在数据框中,您如何以 Python 方式执行此操作?
例如对于以下数据框:
import pandas as pd
df = pd.DataFrame({'user_id': [1, 2, 3, 4, 1, 2, 3],
'class_type': ['Krav Maga', 'Yoga', 'Ju-jitsu', 'Krav Maga', 'Ju-jitsu','Krav Maga', 'Karate'],
'instructor': ['Bob', 'Alice','Bob', 'Alice','Alice', 'Alice','Bob']})
想要的结果是下面以pythonic方式生成的数据框:
|user_id|class_type |instructor |
|-------|-----------------------|---------------|
| 1 | {Krav Maga, Ju-jitsu} | {Bob, Alice} |
| 2 | {Krav Maga, Yoga} | {Alice} |
| 3 | {Karate, Ju-jitsu} | {Bob} |
| 4 | {Krav Maga} | {Alice} |
这是一个虚拟示例。这个问题源于:“如果我有一个包含 30 列的表,我想以 Python 的方式实现这一点怎么办?”
目前我有一个解决方案,但我认为这不是最好的方法:
df[['grouped_B', 'grouped_C']] = df.groupby('A')[['B','C']].transform(set)
deduped_and_collapsed_df = df.groupby('A')[['A','grouped_B', 'grouped_C']].head(1)
提前谢谢你!
【问题讨论】:
标签: python pandas pandas-groupby