我有以下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
中出现两次。大熊猫的做法是什么?
答案 0 :(得分:3)
您可以使用MainActivity.getInstance().updateMethod([pass stuff here]);
;在过滤器中,为每个组构造一个唯一的布尔值来过滤数据框:
groupby.filter
另一种选择可能是:
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