我有两个数据帧: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)
手掌心
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 上。
添加回答
举报
0/150
提交
取消