Pandas合并两个DataFrame时如何得到指定的3行结果?
解决Pandas合并DataFrame出现多余行的问题
合并后得到9行而非预期3行,核心原因是其中一个(或两个)DataFrame的uid字段存在重复值,导致合并时发生一对多/多对多匹配,行数倍增。
排查与解决步骤:
- 先检查
uid的重复情况
执行以下代码确认哪个DF存在重复的uid:
# 查看df中各uid的出现次数 print(df['uid'].value_counts()) # 查看tempdf中各uid的出现次数 print(tempdf['uid'].value_counts())
- 根据重复原因处理数据
如果是冗余重复数据:直接对重复的DF去重,保留每个uid对应的唯一行。比如保留tempdf中每个uid的第一条记录:
tempdf = tempdf.drop_duplicates(subset='uid', keep='first')若需要保留最新记录,可先排序再去重:
# 按时间倒序排序,保留最新的一条 tempdf = tempdf.sort_values('time_date_friendly', ascending=False).drop_duplicates(subset='uid', keep='first')如果是每个uid对应多条有效数据:先对数据分组聚合,把同一uid的多条数据合并为单行,再执行合并。比如将tempdf中同一uid的Reference合并为列表,取最新的time_date_friendly:
tempdf_agg = tempdf.groupby('uid').agg( time_date_friendly=('time_date_friendly', 'max'), Reference=('Reference', list) ).reset_index()
- 执行合并
处理完成后再执行合并操作,就能得到预期的3行结果:
merged_df = tempdf.merge(df, how='left', on='uid')
内容的提问来源于stack exchange,提问作者James H
相关产品推荐
相关产品推荐

