我有一个列列表,我只想让col1或col2或col3的行等于1(所有列的条件相同)。
listColumnName=['col1','col2','col3']
myDF[(myDF[listColumnName[0]]==1) | (myDF[listColumnName[1]]==1) | (myDF[listColumnName[2]]==1)]
如果我的列列表很大,最好的方法是什么?
myDF[myDF[listColumnName]==1]
答案 0 :(得分:2)
您可以将eq
(==
)的按子集列表过滤的所有列与DataFrame.any
进行比较-检查每行是否至少有True
:
myDF = pd.DataFrame({
'A':list('abcdef'),
'col1':[4,1,4,5,5,4],
'col2':[7,8,9,1,2,3],
'col3':[1,3,5,7,4,0],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')
})
print (myDF)
A col1 col2 col3 E F
0 a 4 7 1 5 a
1 b 1 8 3 3 a
2 c 4 9 5 6 a
3 d 5 1 7 9 b
4 e 5 2 4 2 b
5 f 4 3 0 4 b
listColumnName=['col1','col2','col3']
df = myDF[myDF[listColumnName].eq(1).any(axis=1)]
print (df)
A col1 col2 col3 E F
0 a 4 7 1 5 a
1 b 1 8 3 3 a
3 d 5 1 7 9 b
详细信息:
print (myDF[listColumnName])
col1 col2 col3
0 4 7 1
1 1 8 3
2 4 9 5
3 5 1 7
4 5 2 4
5 4 3 0
print (myDF[listColumnName].eq(1))
col1 col2 col3
0 False False True
1 True False False
2 False False False
3 False True False
4 False False False
5 False False False
print (myDF[listColumnName].eq(1).any(axis=1))
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool