簡體   English   中英

Pandas:刪除在另一個 DataFrame 中顯示的行

[英]Pandas: Remove rows with column displayed in another DataFrame

盡管標題令人困惑,但我想要的是:

DataFrame 1:

i | col_1 | col_2 | col_3 1 | data1 | data2 | data3 2 | data4 | data4 | data6 3 | data7 | data8 | data9

DataFrame 2:

i | col_1 | col_2 | col_3 1 | dataA | data8 | dataB 2 | dataC | data2 | dataD 3 | dataE | dataF | dataG

代碼應該從 DataFrame 2 中刪除第 1 行和第 2 行,因為col_2的值出現在 DataFrame 1 的col_2中。列是特定的,代碼不需要測試所有列。 所以 DataFrame 2 在這個過程之后應該是這樣的:

i | col_1 | col_2 | col_3 1 | dataE | dataF | dataG

它是使用isin否定的掩碼

df3 = df2[~df2.col_2.isin(df1.col_2)]

Out[942]:
   i  col_1  col_2  col_3
2  3  dataE  dataF  dataG

這段代碼會做到這一點。 關鍵是~df2.col_2.isin(df1.col_2) isin isin() function 基本上做的是 go 通過seriesdf2.col_2 )並檢查每個元素,它是否在參數seriesdf1.col_2 它返回一系列boolean值,對應於df2的索引。 然后前面的~否定了這一點,只得到獨特的(或不在的) df1 然后用它來過濾原始的df2

import pandas as pd

df1 = pd.DataFrame([['data1', 'data2', 'data3'],
                    ['data4', 'data4', 'data6'] ,
                    ['data7', 'data8', 'data9']],
                   columns=['col_1', 'col_2', 'col_3'])
df2 = pd.DataFrame([['dataA', 'data8', 'dataB'],
                    ['dataC', 'data2', 'dataD'] ,
                    ['dataE', 'dataF', 'dataG']],
                   columns=['col_1', 'col_2', 'col_3'])
keep = ~df2.col_2.isin(df1.col_2)
df = df2[keep]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM