猿问

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

我有两个数据帧: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)


哈士奇WWW
浏览 94回答 2
2回答

慕田峪9158850

样本数据会很有用。让我们尝试一下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)

手掌心

上面的代码可以实现你想要的功能。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 上。
随时随地看视频慕课网APP

相关分类

Python
我要回答