Pandas: Selecting rows based on value counts of a particular column

I think you can use groupby by column sym and filter values with 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

Second solution use isin with 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

And fastest solution with transform and 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

Leave a Comment