2016-07-01 14 views
1

Ich bin neu in Pandas und Python. Ich möchte Wörterbuch verwenden Datenrahmen zu filternFilter DataFrame mit Wörterbuch

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']} 

Als ich

df[df.isin(my_filter)] 

nenne ich

bekommen
 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 

Was ich will, ist

 A B D 
3 3.0 c 0 
5 3.0 c 0 

Ich möchte nicht zu addiere "D" in der Wörterbuch, möchte ich Zeilen erhalten, die richtigen Werte in A hat und B clumns

Antwort

2

Sie können sum von True durch Spalten und dann vergleichen mit 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 

Eine andere Lösung mit ersten Filter nur Spalten mit Bedingung A und B mit all für beide True durch Spalten Überprüfung:

print (df[df[['A','B']].isin(my_filter).all(1)]) 
    A B D 
3 3 c 0 
5 3 c 0 

Danke MaxU für flexiblere Lösung:

print (df[df.isin(my_filter).sum(1) == len(my_filter.keys())]) 
    A B D 
3 3 c 0 
5 3 c 0 
+0

Ja ist, bedeutet es Länge von Tasten dict zählen - in diesem Beispiel der 2 ist, weil Schlüssel sind 'dict_keys ([ 'A', 'B'])'. – jezrael

Verwandte Themen