首页 > 解决方案 > 根据列值删除行 - 但不仅仅是一个列值 - 值列表

问题描述

如果列包含“XYZ”,我理解下面的示例删除一行:

df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"]))
In [92]: df
Out[92]:
   A          C
0  5        foo
1  3        bar
2  5  fooXYZbar
3  6        bat

In [93]: df[df.C.str.contains("XYZ") == False]
Out[93]:
   A    C
0  5  foo
1  3  bar
3  6  bat

但是,如果您希望它删除该行,如果该列包含另一个数据框列内的任何内容,那么假设我们有第二个数据框

df2 = pd.DataFrame(dict(A=["XYZ","ABC","EFg","6","foo"], C=["test","bar","testABC", "ba6t"]))

所以我想做一些事情列出这个(注意 pusdo 代码)

df[df.C.str.contains(df2.'Column A') == False]

如果 df 列 C 包含 df2 列 A 内的任何内容,请删除 df 中的行

标签: pythonpandas

解决方案


尝试这个,

l=df2['A'].unique().tolist()
reg='|'.join(l)
print df1[df1['C'].str.contains(reg)==False]

输出:

   A    C
1  3  bar
3  6  bat

用于去除 NaN

l=df2[df2['A'].notnull()]['A'].unique().tolist()

推荐阅读