¿Cómo asignar un nombre a la columna a size ()?

Estoy usando .size () en un resultado groupby para contar cuántos elementos hay en cada grupo.

Me gustaría que el resultado se guarde en un nuevo nombre de columna sin editar manualmente el conjunto de nombres de columna, ¿cómo se puede hacer?

Gracias

Esto es lo que he intentado:

grpd = df.groupby(['A','B']) grpd['size'] = grpd.size() grpd 

y el error que obtuve:

TypeError: el objeto ‘DataFrameGroupBy’ no es compatible con la asignación de elementos (en la segunda línea)

El resultado de df.groupby(...) no es un DataFrame. Para recuperar un DataFrame, debe aplicar una función a cada grupo, transformar cada elemento de un grupo o filtrar los grupos.

Parece que quiere un DataFrame que contenga (1) todos sus datos originales en df y (2) el recuento de la cantidad de datos en cada grupo. Estas cosas tienen diferentes longitudes, por lo que si necesitan ir al mismo DataFrame, deberá enumerar el tamaño de forma redundante, es decir, para cada fila en cada grupo.

 df['size'] = df.groupby(['A','B']).transform(np.size) 

(Aparte: es útil si puede mostrar muestras sucintas y resultados esperados).

El .size() incorporado .size() de los objetos DataFrameGroupBy en realidad devuelve un objeto Serie con los tamaños de grupo y no un DataFrame. Si desea un DataFrame cuya columna tenga los tamaños de grupo, indexados por los grupos, con un nombre personalizado, puede usar el método .to_frame() y usar el nombre de columna deseado como argumento.

 grpd = df.groupby(['A','B']).size().to_frame('size') 

Si desea que los grupos sean columnas nuevamente, puede agregar un .reset_index() al final.

Necesita size transform : len de df es el mismo que antes:

 import pandas as pd df = pd.DataFrame({'A': ['x', 'x', 'x','y','y'] , 'B': ['a', 'c', 'c','b','b']}) print (df) AB 0 xa 1 xc 2 xc 3 yb 4 yb df['size'] = df.groupby(['A', 'B'])['A'].transform('size') print (df) AB size 0 xa 1 1 xc 2 2 xc 2 3 yb 2 4 yb 2 

Si es necesario, configure el nombre de la columna al agregar dflen de df obviamente NO es el mismo que antes:

 import pandas as pd df = pd.DataFrame({'A': ['x', 'x', 'x','y','y'] , 'B': ['a', 'c', 'c','b','b']}) print (df) AB 0 xa 1 xc 2 xc 3 yb 4 yb df = df.groupby(['A', 'B']).size().reset_index(name='Size') print (df) AB Size 0 xa 1 1 xc 2 2 yb 2 

digamos que n es el nombre del dataframe y cst es el no de los elementos que se repiten. El siguiente código da el conteo en la próxima columna

 cstn=Counter(n.cst) cstlist = pd.DataFrame.from_dict(cstn, orient='index').reset_index() cstlist.columns=['name','cnt'] n['cnt']=n['cst'].map(cstlist.loc[:, ['name','cnt']].set_index('name').iloc[:,0].to_dict()) 

Espero que esto funcione