繁体   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