[英]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.