Tengo un marco de datos de pandas en el siguiente formato:
df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4','col5']
df:
col1 col2 col3 col4 col5
0 1.1 A 1.1 x/y/z 1
1 1.1 A 1.7 x/y 3
2 1.1 A 2.5 x/y/z/n 3
3 2.6 B 2.6 x/u 2
4 2.5 B 3.3 x 4
5 3.4 B 3.8 x/u/v 2
6 2.6 B 4 x/y/z 5
7 2.6 A 4.2 x 3
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
10 2.6 B 4.6 x/y 5
11 1.1 D 4.7 x/y/z 1
12 1.1 D 4.7 x 1
13 3.3 D 4.8 x/u/v/w 1
Ahora quiero agrupar esto por dos columnas como las siguientes:
df.groupby(['col5','col2']).reset_index()
Salida:
index col1 col2 col3 col4 col5
col5 col2
1 A 0 0 1.1 A 1.1 x/y/z 1
D 0 11 1.1 D 4.7 x/y/z 1
1 12 1.1 D 4.7 x 1
2 13 3.3 D 4.8 x/u/v/w 1
2 B 0 3 2.6 B 2.6 x/u 2
1 5 3.4 B 3.8 x/u/v 2
3 A 0 1 1.1 A 1.7 x/y 3
1 2 1.1 A 2.5 x/y/z/n 3
2 7 2.6 A 4.2 x 3
C 0 9 3.4 C 4.5 - 3
4 B 0 4 2.5 B 3.3 x 4
5 B 0 6 2.6 B 4 x/y/z 5
1 10 2.6 B 4.6 x/y 5
6 B 0 8 3.4 B 4.3 x/u/v/b 6
Quiero obtener el recuento de cada fila como sigue. Rendimiento esperado:
col5 col2 count
1 A 1
D 3
2 B 2
etc...
¿Cómo obtener mi salida esperada? ¿Y quiero encontrar el recuento más grande para cada valor 'col2'?
Respuestas:
Seguido de la respuesta de @ Andy, puede hacer lo siguiente para resolver su segunda pregunta:
fuente
Usted está buscando
size
:Para obtener la misma respuesta que waitingkuo (la "segunda pregunta"), pero un poco más limpia, es agrupar por nivel:
fuente
Insertar datos en un marco de datos de pandas y proporcionar el nombre de la columna .
Estos son nuestros datos impresos:
Para hacer un grupo de marco de datos en pandas y contador ,
debe proporcionar una columna más que cuente la agrupación, llamemos a esa columna como "CONTADOR" en el marco de datos .
Me gusta esto:
SALIDA:
fuente
Solución idiomática que usa solo un grupo
Explicación
El resultado del
size
método groupby es una Serie concol5
ycol2
en el índice. Desde aquí, puede usar otro método groupby para encontrar el valor máximo de cada valor,col2
pero no es necesario hacerlo. Simplemente puede ordenar todos los valores de mantener a descender y luego sólo las filas con la primera aparición decol2
ladrop_duplicates
método.fuente
name
enreset_index()
la versión actual de pandas: pandas.pydata.org/pandas-docs/stable/generated/…DataFrame
noSeries
. Gracias por el enlace.Si desea agregar una nueva columna (por ejemplo, 'cuenta_columna') que contiene los recuentos de los grupos en el marco de datos:
(Elegí 'col5' ya que no contiene nan)
fuente
Puede usar el recuento de funciones incorporado seguido de la función groupby
fuente