如何在value_counts上对pandas数据框进行子集化?

时间:2017-03-29 20:51:04

标签: python pandas dataframe subset

我有以下pandas dataframe

import pandas as pd
df = pd.read_csv("filename1.csv")

df
    column1  column2   column3
0        10       A          1
1        15       A          1
2        19       B          1
3      5071       B          0
4      5891       B          0
5      3210       B          0
6        12       B          2
7        13       C          2
8        20       C          0
9         5       C          3
10        9       C          3

现在,使用函数value_counts()将为我提供某个列中每个值的计数,例如

df.column3.value_counts()

1   3
2   2
3   2

但是,我想根据给定列中的值的数量对pandas数据帧进行子集化。例如,在上面的数据帧df中,我想对具有3个或更多唯一值(不包括0)的行进行子集化。在这种情况下,结果数据帧将是

df
    column1  column2   column3
0        10       A          1
1        15       A          1
2        19       B          1

由于值2和3的行只有两行,即2,3只在column3中出现两次。大熊猫的做法是什么?

3 个答案:

答案 0 :(得分:3)

您可以使用MainActivity.getInstance().updateMethod([pass stuff here]); ;在过滤器中,为每个组构造一个唯一的布尔值来过滤数据框:

groupby.filter

enter image description here

另一种选择可能是:

df.groupby("column3").filter(lambda g: (g.name != 0) and (g.column3.size >= 3))

答案 1 :(得分:1)

或者您可以在分组前过滤掉零:

 df1[df1['column3'] != 0].groupby("column3").filter(lambda x: x['column3'].size >= 3 )

答案 2 :(得分:1)

替代解决方案:

In [132]: cnt = df.column3.value_counts()

In [133]: cnt
Out[133]:
0    4
1    3
3    2
2    2
Name: column3, dtype: int64

In [134]: v = cnt[(cnt.index != 0) & (cnt >= 3)].index.values

In [135]: v
Out[135]: array([1], dtype=int64)

In [136]: df.query("column3 in @v")
Out[136]:
   column1 column2  column3
0       10       A        1
1       15       A        1
2       19       B        1