从 panda 数据框中选择所有行的最简单方法是什么,谁的 sym 在整个表中恰好出现两次?例如,在下表中,我想选择 ['b','e'] 中包含 sym 的所有行,因为这些符号的 value_counts 等于 2。
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
我想你可以使用groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html按列sym
and filter http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.filter.html价值观与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 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.isin.html with 布尔索引 http://pandas.pydata.org/pandas-docs/stable/indexing.html#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 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.transform.html and boolean indexing http://pandas.pydata.org/pandas-docs/stable/indexing.html#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)