如何按多列过滤pandas数据框



我想从列n中获取值,其中其他列子集中的值为True。例如,数据帧:

t, f = True, False
data = [
[t, f, f, '1'],
[f, f, f, '2'],
[f, t, f, '3'],
[f, f, t, '4']
]
df = pd.DataFrame(data, columns=list("abcn"))

a      b      c  n
0   True  False  False  1
1  False  False  False  2
2  False   True  False  3
3  False  False   True  4

搜索列是ab,我希望从n中获得记录,其中这些列是True,我尝试过:

fcols = ("a", "b")
df[df[[*fcols]] == t].dropna(axis=0, how='all')

这是给我正确的记录,但是Nann

a     b    c    n
0  True   NaN  NaN  NaN
2   NaN  True  NaN  NaN

我觉得我或多或少接近解决办法了,但是……

使用any聚合布尔值用于布尔索引:

fcols = ("a", "b")
out = df[df[[*fcols]].eq(t).any(axis=1)]#.dropna(axis=0, how='all') # dropna not needed

输出:

a      b      c  n
0   True  False  False  1
2  False   True  False  3

中间索引系列:

df[[*fcols]].eq(t).any(axis=1)
0     True
1    False
2     True
3    False
dtype: bool

使用DataFrame.any测试传递给boolean indexing的布尔系列的每行至少一个True匹配:

fcols = ("a", "b")
df = df[df[[*fcols]].eq(t).any(axis=1)]
#if need test Trues, possible remove compare by True
df = df[df[[*fcols]].any(axis=1)]
print (df)
a      b      c  n
0   True  False  False  1
2  False   True  False  3

:

print (df[[*fcols]].eq(t).any(axis=1))
0     True
1    False
2     True
3    False
dtype: bool

我决定这样做

df = df[df['a'] | df['b']]
In [5]: df
Out[5]: 
a      b      c  n
0   True  False  False  1
2  False   True  False  3

相关内容

  • 没有找到相关文章

最新更新