删除具有低频率列的所有行的最佳做法是什么?
数据帧:
IN:
foo bar poo
1 a A
2 a A
3 a B
4 b B
5 b A
6 b A
7 c C
8 d B
9 e B
示例1: 在列' poo':
中删除频率值小于3的所有行OUT:
foo bar poo
1 a A
2 a A
3 a B
4 b B
5 b A
6 b A
8 d B
9 e B
示例2: 在列'栏':
中删除频率值小于3的所有行OUT:
foo bar poo
1 a A
2 a A
3 a B
4 b B
5 b A
6 b A
答案 0 :(得分:4)
IIUC过滤器..
df.groupby('poo').filter(lambda x : (x['poo'].count()>=3).any())
Out[81]:
foo bar poo
0 1 a A
1 2 a A
2 3 a B
3 4 b B
4 5 b A
5 6 b A
7 8 d B
8 9 e B
或将value_counts
与isin
s=df.poo.value_counts().gt(3)
df.loc[df.poo.isin(s[s].index)]
Out[89]:
foo bar poo
0 1 a A
1 2 a A
2 3 a B
3 4 b B
4 5 b A
5 6 b A
7 8 d B
8 9 e B
答案 1 :(得分:3)
这应该很容易概括。您需要groupby
+ transform
+ count
,然后过滤结果:
col = 'poo' # 'bar'
n = 3 # 2
df[df.groupby(col)[col].transform('count').ge(n)]
foo bar poo
0 1 a A
1 2 a A
2 3 a B
3 4 b B
4 5 b A
5 6 b A
7 8 d B
8 9 e B