sumar seleccionar recorrer promedio example data columnas python pandas dataframe

python - seleccionar - Pandas DataFrame Groupby dos columnas y obtener recuentos



seleccionar columnas de un dataframe pandas (6)

Solución idiomática que utiliza solo un solo grupo por

df.groupby([''col5'', ''col2'']).size() / .sort_values(ascending=False) / .reset_index(name=''count'') / .drop_duplicates(subset=''col2'') col5 col2 count 0 3 A 3 1 1 D 3 2 5 B 2 6 3 C 1

Explicación

El resultado del método groupby size es una serie con col5 y col2 en el índice. Desde aquí, puede usar otro método groupby para encontrar el valor máximo de cada valor en col2 pero no es necesario hacerlo. Puede simplemente ordenar todos los valores de forma descendente y luego mantener solo las filas con la primera aparición de col2 con el método drop_duplicates .

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 conteo por cada fila como sigue. Rendimiento esperado:

col5 col2 count 1 A 1 D 3 2 B 2 etc...

¿Cómo obtener mi producción esperada? ¿Y quiero encontrar el conteo más grande para cada valor de ''col2''?


Insertar datos en un marco de datos de pandas y proporcionar el nombre de la columna .

import pandas as pd df = pd.DataFrame([[''A'',''C'',''A'',''B'',''C'',''A'',''B'',''B'',''A'',''A''], [''ONE'',''TWO'',''ONE'',''ONE'',''ONE'',''TWO'',''ONE'',''TWO'',''ONE'',''THREE'']]).T df.columns = [[''Alphabet'',''Words'']] print(df) #printing dataframe.

Esta es nuestra información impresa:

Para hacer un grupo de dataframe 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:

df[''COUNTER''] =1 #initially, set that counter to 1. group_data = df.groupby([''Alphabet'',''Words''])[''COUNTER''].sum() #sum function print(group_data)

SALIDA:


Seguido de la respuesta de @ Andy, puede hacer lo siguiente para resolver su segunda pregunta:

In [56]: df.groupby([''col5'',''col2'']).size().reset_index().groupby(''col2'')[[0]].max() Out[56]: 0 col2 A 3 B 2 C 1 D 3


Si desea agregar una nueva columna (digamos ''count_column'') que contenga los conteos de los grupos en el marco de datos:

df.count_column=df.groupby([''col5'',''col2'']).col5.transform(''count'')

(Escogí ''col5'' ya que no contiene nan)


Solo puede usar el recuento de funciones incorporado seguido de la función groupby

df.groupby([''col5'',''col2'']).count()


Usted está buscando el size :

In [11]: df.groupby([''col5'', ''col2'']).size() Out[11]: col5 col2 1 A 1 D 3 2 B 2 3 A 3 C 1 4 B 1 5 B 2 6 B 1 dtype: int64

Para obtener la misma respuesta que waitingkuo (la "segunda pregunta"), pero ligeramente más clara, es agrupar por el nivel:

In [12]: df.groupby([''col5'', ''col2'']).size().groupby(level=1).max() Out[12]: col2 A 3 B 2 C 1 D 3 dtype: int64