Pandas运行表达式以使用动态列名列表过滤出列

时间:2017-01-25 13:29:29

标签: python pandas

我有一个用户将在运行时提供的列列表。因此,列表可能会发生变化。

我想从DataFrame中删除所有行,这些行在该列列表中为 ALL 列设置了值。我如何在熊猫中有效地做到这一点?最好的方法是简单地迭代,还是有更多的“熊猫”方法呢?

1 个答案:

答案 0 :(得分:1)

我认为您可以boolean indexing使用all来检查所有True值:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[1,5,6],
                   'C':[1,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  1  1  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

cols = ['A','B','C']
val = 1

print (df[cols] == val)
       A      B      C
0   True   True   True
1  False  False  False
2  False  False  False

mask = ~(df[cols] == val).all(axis=1)
print (mask)
0    False
1     True
2     True
dtype: bool

print (df[mask])
   A  B  C  D  E  F
1  2  5  8  3  3  4
2  3  6  9  5  6  3