Id 0 1 2 3 4 5
0 apple True None None None None None
1 orange False None True None None None
2 banana True None None True None None
3 guava False None None None True None
4 leeche None True None None None None
以上数据框包含布尔值和无值 如果0-5列中的任何一个为false,我想从更新的数据框中省略它们。考虑到None表示True值,因此我的结果应该像
Id
0 apple
2 banana
4 leeche
我无法理解如何在多个列上使用组合过滤器。
答案 0 :(得分:3)
使用:
cols = ['0','1','2','3','4','5']
df = df.loc[df[cols].ne('False').all(1), ['Id']]
#if False is boolean
#df = df.loc[df[cols].ne(False).all(1), ['Id']]
print (df)
Id
0 apple
2 banana
4 leeche
如果需要检查所有列,而无需先检查:
df = df.loc[df.iloc[:, 1:].ne('False').all(1), ['Id']]
说明:
首先按列名称选择列:
#if strings
cols = ['0','1','2','3','4','5']
#if numeric
#cols = np.arange(6)
print (df[cols])
0 1 2 3 4 5
0 True None None None None None
1 False None True None None None
2 True None None True None None
3 False None None None True None
4 None True None None None None
然后通过DataFrame.ne
检查是否不等于False
:
#if boolean False
print(df[cols].ne(False))
#if string False
#print(df[cols].ne('False'))
0 1 2 3 4 5
0 True True True True True True
1 False True True True True True
2 True True True True True True
3 False True True True True True
4 True True True True True True
并通过DataFrame.all
测试每行是否所有True
:
print(df[cols].ne('False').all(1))
0 True
1 False
2 True
3 False
4 True
dtype: bool
通过boolean indexing
对Id
的一列选择[]
和DataFrame
进行的最后过滤:
print(df[df[cols].ne('False').all(1)])
Id 0 1 2 3 4 5
0 apple True None None None None None
2 banana True None None True None None
4 leeche None True None None None None
print(df.loc[df[cols].ne('False').all(1), ['Id']])
Id
0 apple
2 banana
4 leeche