Aquí hay un ejemplo ficticio:

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

Entonces, el grupo de id 4 y 5 debe reemplazarse por algún texto.

Entonces, puedo encontrar qué valores tienen una frecuencia de menos de 3 usando:

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

Ahora, no estoy seguro de ir y reemplazar estos valores en mi marco de datos con un texto arbitrario (es decir, "ruido")

Creo que es suficiente información, avíseme si desea que incluya algo más:

0
madsthaks 15 nov. 2017 a las 00:24

2 respuestas

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

Actualización:

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
3
MaxU 14 nov. 2017 a las 21:28
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

Después de asignarlo de nuevo

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
2
YOBEN_S 14 nov. 2017 a las 21:32