如何对pandas列中频率为2或更小的所有值进行分组

时间:2017-11-14 21:24:52

标签: python pandas

这是一个虚构的例子:

id cluster
1 3
2 3 
3 3
4 1
5 5

因此,id 4和5的集群应该替换为某些文本。

因此,我能够使用以下方法找到频率小于3的值:

counts = distclust.groupby("cluster")["cluster"].count()
counts[counts < 3].index.values

现在,我不确定是否会使用一些任意文本(即#34;噪音&#34;)替换我的数据框中的这些值。

我认为这是足够的信息,如果您希望我包含其他内容,请与我联系:

2 个答案:

答案 0 :(得分:3)

In [82]: df.groupby('cluster').filter(lambda x: len(x) <= 2)
Out[82]:
   id  cluster
3   4        1
4   5        5

更新

In [95]: idx = df.groupby('cluster').filter(lambda x: len(x) <= 2).index

In [96]: df.loc[idx, 'cluster'] = -999

In [97]: df
Out[97]:
   id  cluster
0   1        3
1   2        3
2   3        3
3   4     -999
4   5     -999

答案 1 :(得分:2)

df.cluster.replace((df.cluster.value_counts()<=1).replace({True:'noise',False:np.nan}).dropna())
Out[627]: 
0        3
1        3
2        3
3    noise
4    noise
Name: cluster, dtype: object

分配后

df.cluster=df.cluster.replace((df.cluster.value_counts()<=1).replace({True:'noise',False:np.nan}).dropna())
df
Out[629]: 
   id cluster
0   1       3
1   2       3
2   3       3
3   4   noise
4   5   noise