如何在Python中基于唯一userID合并两个DataFrame并去除重复行
实现方法
你可以通过pandas的拼接+去重两步完成需求,代码如下:
首先导入依赖,构造示例数据(如果已经有真实的df1、df2可跳过构造部分):
import pandas as pd # 构造df1示例数据 df1 = pd.DataFrame({ 'userid': [1,2,3,4,5], 'name': ['a','b','c','d','e'], 'count': [10,20,30,40,50] }) # 构造df2示例数据 df2 = pd.DataFrame({ 'userid': [6,7,8,4,2], 'name': ['f','g','h','d','b'], 'count': [60,70,80,40,20] })
执行合并去重操作:
# 方法1:concat拼接后按userid去重,适配你当前的场景 df3 = pd.concat([df1, df2], ignore_index=True).drop_duplicates(subset='userid', keep='first') # 按userid升序排序,和你给出的期望结果顺序完全一致,不需要排序可以删除这行 df3 = df3.sort_values('userid', ignore_index=True)
如果担心字段匹配问题,也可以用外连接的写法实现,逻辑等价:
# 方法2:按全字段外连接,自动合并重复行 df3 = pd.merge(df1, df2, on=['userid','name','count'], how='outer').sort_values('userid', ignore_index=True)
参数说明
concat的ignore_index=True用于重置拼接后的行索引,避免两个df原有索引重复冲突drop_duplicates的subset='userid'指定仅按userid字段判断重复,keep='first'表示重复时保留第一次出现的行,你当前场景下重复行的name、count完全一致,keep参数选first/last都不影响结果sort_values('userid')用于输出结果按userid升序排列,不需要排序可直接删除该语句。
内容的提问来源于stack exchange,提问作者noob_python
相关产品推荐
相关产品推荐

