Pandas:根据特定列的值计数选择行

2024-04-25 19:43:34 发布

您现在位置:Python中文网/ 问答频道 /正文

从panda数据框中选择所有行的最简单方法是什么?谁的sym在整个表中正好出现两次?例如,在下表中,我想选择在“['b','e']中有sym的所有行,因为这些符号的值_等于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

Tags: 数据方法dataframedfvaluenp符号random
1条回答
网友
1楼 · 发布于 2024-04-25 19:43:34

我认为您可以使用^{}by columnsym^{}值和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

第二种解决方案使用^{}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

最快的解决方案是^{}^{}

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

相关问题 更多 >