[英]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 通過series
( df2.col_2
)並檢查每個元素,它是否在參數series
: df1.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.