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

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

根據另一個數據框的一列刪除一個數據框的行

根據另一個數據框的一列刪除一個數據框的行

鳳凰求蠱 2023-06-20 10:29:51
我有兩個 DataFrame 并想刪除 df1 中的行,其中我們在 df2 的“a”列中具有相同的值。此外,df2 中的一個公共值只會刪除一行。df1 = pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})df2 = pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})result = pd.DataFrame({'a':[1,1,3,4],'b':[1,2,4,6],'c':[6,5,3,1]})
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

使用Series.isin+Series.duplicated創建一個布爾掩碼并使用此掩碼過濾來自以下行的行df1

m = df1['a'].isin(df2['a']) & ~df1['a'].duplicated()

df = df1[~m]

結果:


print(df)

? ?a? b? c

0? 1? 1? 6

1? 1? 2? 5

3? 3? 4? 3

5? 4? 6? 1


查看完整回答
反對 回復 2023-06-20
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

嘗試這個


df1=pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})

df2=pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})


for x in df2.a:

    if x in df1.a:

        df1.drop(df1[df1.a==x].index[0], inplace=True)


print(df1)


查看完整回答
反對 回復 2023-06-20
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

嘗試這個:


import pandas as pd

df1=pd.DataFrame({'a':[1,1,2,3,4,4],'b':[1,2,3,4,5,6],'c':[6,5,4,3,2,1]})

df2=pd.DataFrame({'a':[2,4,2],'b':[1,2,3],'c':[6,5,4]})

df2a = df2['a'].tolist()

def remove_df2_dup(x):

    if x in df2a:

        df2a.remove(x)

        return False

    return True

df1[df1.a.apply(remove_df2_dup)]

它從 中創建一個列表df2['a'],然后根據 中的每個值檢查該列表df1['a'],每次在中匹配時從列表中刪除值df1


查看完整回答
反對 回復 2023-06-20
  • 3 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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