我有以下 Pandas 数据框
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
中只出现了两次。 Pandas 的方法是什么?
你可以使用groupby.filter
;在过滤器中,为每个组构造一个唯一的 bool 值来过滤数据框:
df.groupby("column3").filter(lambda g: (g.name != 0) and (g.column3.size >= 3))
另一种选择是:
df[(df.column3 != 0) & (df.groupby("column3").column3.transform("size") >= 3)]
我是一名优秀的程序员,十分优秀!