为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas - 从具有不同列的两个数据框中删除重复项

Pandas - 从具有不同列的两个数据框中删除重复项

哈士奇WWW 2023-08-08 09:59:43
我有两个数据帧:1 个主要 df 和 1 个包含我想在主要数据帧(dfmatch)中删除的行。主要 df 比 dfmatch 具有更多列。我只想删除主要 df 中的行,如果第 1 列、第 2 列和第 3 列等于 dfmatch 的相应列中的值。列 extra1 和 extra2 也应该在 dfnew 中可用。我当前的脚本仅显示列标题而不是其余行:file = 'testdf.csv'colnames=['column1', 'column2', 'column3', 'extra1', 'extra2'] df = pd.read_csv(file, names=colnames, header=None)file = 'testdfmatch.csv'colnames=['column1', 'column2', 'column3'] dfmatch = pd.read_csv(file, names=colnames, header=None)dfnew = pd.concat([dfmatch,df,df], sort=False).drop_duplicates(['column1', 'column2', 'column3'], keep=False)
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

样本数据会很有用。让我们尝试一下pd.merge,indicator=


dfnew  = pd.merge(df, dfmatch, how='left', indicator='Exist')

dfnew  = dfnew .loc[dfnew ['Exist'] != 'both']

dfnew.drop(columns=['Exist'], inplace=True) 

print(dfnew)


查看完整回答
反对 回复 2023-08-08
?
手掌心

TA贡献1942条经验 获得超3个赞

上面的代码可以实现你想要的功能。


dfnew=df.append(dfmatch,ignore_index=True)

defnew.drop_duplicates(subset=['column1', 'column2', 'column3'],

                 keep = 'first', inplace = True)

它在 df 下面添加 dfmatch 创建 dfnew。然后,它仅使用第 1、2 和 3 列作为子集来删除重复行。它仅保留与 df 中的初始行相对应的第一个匹配项,其中包括 extra1 和 extra2。


由于 python 中的浮点精度处理,我不建议使用浮点值作为子集。extra1 和 extra2 上带有 NaN 的行表示最初位于 dfmatch 上。


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信