2016-03-22 4 views
2

Самый простой способ выбора всех строк из фреймворка panda, который sym встречается ровно дважды во всей таблице? Например, в приведенной ниже таблице, я хотел бы, чтобы выбрать все строки с симво в [ «B», «е»], так как value_counts для этих символов равна 2.Pandas: выбор строк на основе значений значений для определенного столбца

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 

ответ

12

Я думаю, что вы можете использовать groupby на колонке sym и filter значений с 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 

Второе применение раствора isin с 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 

И самый быстрый раствор с transform и 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 
Смежные вопросы