2016-07-01 77 views
1

我是熊貓和蟒蛇的新手。 我想用字典來過濾數據幀使用字典過濾數據幀

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」字典,我想在一個有正確的價值觀行和B clumns

回答

2

可以按列,然後用2比較Truesum

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列和Ball檢查都通過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 
+0

是的,這意味着它計算字典的關鍵字長度 - 在這個示例中它是2,因爲鍵是'dict_keys(['A','B'])''。 – jezrael