如何不使用去重功能实现Pandas两个数据表的一对多合并
Pandas数据表合并实现方案
你可以先完成两个表的关联匹配,再将同ID分组下非首行的ID、product字段置为空即可,全程不需要用到移除重复项功能,实现代码如下:
import pandas as pd # 构造示例数据 df = pd.DataFrame({'ID' : [1,2,3], 'product' : ['Phone','Car','Bike']}) df2 = pd.DataFrame({'ID2':[1,1,1,2,2,3,3,3], 'price' : [30,50,30,50,50,20,60,40], 'location' : ['aa','bb','cc','dd', 'ee','tt','hh','yy']}) # 第一步:按ID关联两个表,保留df2所有行并匹配对应的产品信息 merged_df = pd.merge(df2, df, left_on='ID2', right_on='ID', how='left') # 第二步:标记同ID分组下非首次出现的行,仅做标记不删除数据 duplicate_mask = merged_df.duplicated(subset='ID', keep='first') # 第三步:将标记行的ID、product字段置为空字符串 merged_df.loc[duplicate_mask, ['ID', 'product']] = '' # 调整列顺序匹配预期结果 merged_df = merged_df[['ID', 'product', 'ID2', 'price', 'location']] print(merged_df)
运行代码后输出的结果和你给出的预期格式完全一致。
实现逻辑说明:
- 左连接关联保证df2的所有行都完整保留,不会丢失任何数据
- duplicated方法仅用于标记重复ID的非首行数据,不会执行删除操作,符合你的使用限制
- 仅对标记行的指定字段做值替换,其他字段保持不变
内容的提问来源于stack exchange,提问作者Skittles
相关产品推荐
相关产品推荐

