我有兩個數據幀: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
提交
取消