Pandas中按Name列合并不同行ID列且不删除任何行的实现方案
实现方法
核心采用groupby()+transform()的组合实现,transform方法会保留原数据的所有行,仅对同一分组内的所有行返回相同的聚合结果,刚好匹配不删除原有行的需求。
完整代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'Name': ['John', 'John', 'Lucy'], 'ID': ['ABC', 'XYZ', 'MNO'] }) # 核心逻辑:按Name分组后拼接同组所有ID,直接赋值给ID列 df['ID'] = df.groupby('Name')['ID'].transform(lambda x: ', '.join(x)) # 输出结果查看 print(df)
输出结果
| Name | ID |
|---|---|
| John | ABC, XYZ |
| John | ABC, XYZ |
| Lucy | MNO |
注意事项
- 如果ID列是数值类型,需要先转字符串再拼接,将lambda逻辑调整为
lambda x: ', '.join(x.astype(str))即可 - 若需要保留原始ID列,只需将赋值的目标列改为新列名(比如
df['merged_ID']),不会覆盖原有数据
内容的提问来源于stack exchange,提问作者Krawly
相关产品推荐
相关产品推荐

