[英]How to merge pandas value_counts() to dataframe or use it to subset a dataframe
[英]How to subset a pandas dataframe on value_counts?
我有以下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
。 大熊猫的做法是什么?
或者您可以在分组之前过滤掉零:
df1[df1['column3'] != 0].groupby("column3").filter(lambda x: x['column3'].size >= 3 )
替代方案:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.