如何在Pandas中按相同公司名聚合合并对应国家列值?
合并同公司的国家字段解决方案
问题背景
原始数据集:
| country | company_name | company_size | company_activity |
|---|---|---|---|
| DE | McDonalds | 50 | food |
| FR | McDonalds | 50 | food |
| NL | 7 eleven | 5 | food |
需求:将同一公司的国家字段合并为逗号分隔的字符串,得到如下结果:
| country | company_name | company_size | company_activity |
|---|---|---|---|
| DE,FR | McDonalds | 50 | food |
| NL | 7 eleven | 5 | food |
用户尝试了以下冗余代码,但无法返回完整数据集:
df_cross = df.groupby(["company_name"]).agg({"country": ",".join, "company_activity": ",".join, "company_size": "first"}).reset_index().groupby(["country"]).agg({"company_name": "first", "company_activity": ",".join, "company_size": "first"}).reset_index()
简洁优雅的解决方案
只需基于company_name、company_size、company_activity这三个值一致的字段分组,直接合并country字段即可:
df_merged = df.groupby(["company_name", "company_size", "company_activity"], as_index=False).agg({"country": ",".join})
代码说明
- 分组键选择三个不会变化的字段,确保同一组内是完全匹配的同公司记录
as_index=False参数让分组结果直接返回DataFrame,无需额外调用reset_index()- 仅对
country字段执行","join合并,其他字段保持原有值,避免不必要的操作
该代码逻辑清晰,执行高效,能准确得到你需要的结果。
内容的提问来源于stack exchange,提问作者julez8000
相关产品推荐
相关产品推荐

