亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號