我是pandas和python的新手。 我想使用字典来过滤DataFrame
import pandas as pd
from pandas import DataFrame
df = DataFrame({'A': [1, 2, 3, 3, 3, 3], 'B': ['a', 'b', 'f', 'c', 'e', 'c'], 'D':[0,0,0,0,0,0]})
my_filter = {'A':[3], 'B':['c']}
当我打电话
df[df.isin(my_filter)]
我得到了
A B D
0 NaN NaN NaN
1 NaN NaN NaN
2 3.0 NaN NaN
3 3.0 c NaN
4 3.0 NaN NaN
5 3.0 c NaN
我想要的是
A B D
3 3.0 c 0
5 3.0 c 0
我不想在字典中添加“D”,我想获得在A和B列中具有适当值的行
答案 0 :(得分:3)
您可以按列True
sum
,然后与2
进行比较:
print (df.isin(my_filter).sum(1) == 2)
0 False
1 False
2 False
3 True
4 False
5 True
dtype: bool
print (df[df.isin(my_filter).sum(1) == 2])
A B D
3 3 c 0
5 3 c 0
另一种解决方案,首先只筛选条件为A
的列和B
all
的列,以便按列检查True
:
print (df[df[['A','B']].isin(my_filter).all(1)])
A B D
3 3 c 0
5 3 c 0
感谢MaxU
提供更灵活的解决方案:
print (df[df.isin(my_filter).sum(1) == len(my_filter.keys())])
A B D
3 3 c 0
5 3 c 0