2016-03-22 10 views
2

Wie ist die einfachste Methode zum Auswählen aller Zeilen eines Panda-Datenrahmens, wer ist sym genau doppelt in der gesamten Tabelle vorkommt? Zum Beispiel in der unten stehenden Tabelle, würde Ich mag alle Zeilen mit sym in [ ‚b‘, ‚e‘] wählen, da die value_counts für diese Symbole gleich 2.Pandas: Auswählen von Zeilen basierend auf Wert-Zählungen einer bestimmten Spalte

df=pd.DataFrame({'sym':['a', 'b', 'b', 'c', 'd','d','d','e','e'],'price':np.random.randn(9)}) 

        price sym 
    0    -0.0129 a 
    1    -1.2940 b 
    2    1.8423 b 
    3    -0.7160 c 
    4    -2.3216 d 
    5    -0.0120 d 
    6    -0.5914 d 
    7    0.6280 e 
    8    0.5361 e 

df.sym.value_counts() 
Out[237]: 
d 3 
e 2 
b 2 
c 1 
a 1 

Antwort

12

ich glaube, Sie groupby verwenden können durch Spalte sym und filter Werte mit length == 2:

print df.groupby("sym").filter(lambda x: len(x) == 2) 
     price sym 
1 0.400157 b 
2 0.978738 b 
7 -0.151357 e 
8 -0.103219 e 

Zweite Lösung Verwendung isin mit boolean indexing:

s = df.sym.value_counts() 

print s[s == 2].index 
Index([u'e', u'b'], dtype='object') 

print df[df.sym.isin(s[s == 2].index)] 
     price sym 
1 0.400157 b 
2 0.978738 b 
7 -0.151357 e 
8 -0.103219 e 

und schnellste Lösung mit transform und boolean indexing:

print (df[df.groupby("sym")["sym"].transform('size') == 2]) 
    price sym 
1 -1.2940 b 
2 1.8423 b 
7 0.6280 e 
8 0.5361 e 
Verwandte Themen