如何在pandas中对字符串列表进行Group By分组操作?
Pandas 按列表列分组并合并字符串列
解决步骤
因为列表属于不可哈希类型,无法直接作为分组键,所以先将Column 2的列表转为元组,再执行分组聚合:
- 构造测试数据(模拟你的输入):
import pandas as pd data = { "Column 1": ["Task 1", "Task 37", "Task 5", "Task 12"], "Column 2": [["emailofowner1","emailofowner2"], ["emailofowner1","emailofowner2"], ["emailofowner3"], ["emailofowner3"]], "Column 3": ["John Doe", "John Doe", "Jane Smith", "Jane Smith"] } df = pd.DataFrame(data)
- 将列表列转为元组,用于分组:
df['Column 2 Tuple'] = df['Column 2'].apply(tuple)
- 分组并聚合:
result = df.groupby(['Column 2 Tuple', 'Column 3']).agg( Column1=('Column 1', list), Column2=('Column 2', 'first'), Column3=('Column 3', 'first') ).reset_index(drop=True).rename(columns={'Column1': 'Column 1', 'Column2': 'Column 2'})
最终输出
运行后result的结果如下:
| Column 1 | Column 2 | Column 3 |
|---|---|---|
| ["Task 1", "Task 37"] | ["emailofowner1","emailofowner2"] | John Doe |
| ["Task 5", "Task 12"] | ["emailofowner3"] | Jane Smith |
简化写法(一步到位)
如果不想额外创建中间列,可以直接在分组时转换列表:
result = df.groupby( [df['Column 2'].apply(tuple), 'Column 3'] ).agg( Column1=('Column 1', list), Column2=('Column 2', 'first'), Column3=('Column 3', 'first') ).reset_index(drop=True).rename(columns={'Column1': 'Column 1', 'Column2': 'Column 2'})
内容的提问来源于stack exchange,提问作者Suyash
相关产品推荐
相关产品推荐

