tutorial sort groupby group_by examples example python pandas

python - sort - Cómo iterar sobre Pandas Series generadas desde groupby(). Size()



pandas series sort (2)

Para ampliar la respuesta de Psidom, hay tres formas útiles de desempaquetar datos de pd.Series. Teniendo la misma serie que Psidom:

s = pd.Series([1,2,3,4], index=[''a'', ''b'', ''c'', ''d''])

  • Un bucle directo sobre s produce el value de cada fila.
  • Un bucle sobre s.iteritems() o s.items() produce una tupla con los pares (index,value) de cada fila.
  • El uso de enumerate() en s.iteritems() produce una tupla anidada en la forma de: (rownum,(index,value)) .

La última forma es útil en caso de que su índice contenga otra información que no sea el número de la fila (por ejemplo, en el caso de una serie temporal en la que el índice es el tiempo).

s = pd.Series([1,2,3,4], index=[''a'', ''b'', ''c'', ''d'']) for rownum,(indx,val) in enumerate(s.iteritems()): print(''row number: '', rownum, ''index: '', indx, ''value: '', val)

saldrá:

row number: 0 index: a value: 1 row number: 1 index: b value: 2 row number: 2 index: c value: 3 row number: 3 index: d value: 4

Puede leer más sobre el desempaquetado de tuplas anidadas here .

¿Cómo iterar sobre una serie Pandas generada a partir de un .groupby(''...'').size() y obtener el nombre y el recuento del grupo?

Como ejemplo si tengo:

foo -1 7 0 85 1 14 2 5

¿Cómo puedo hacer un bucle sobre ellos para que cada iteración tenga -1 y 7, 0 y 85, 1 y 14 y 2 y 5 en variables?

Probé la opción de enumerar pero no funciona bien. Ejemplo:

for i, row in enumerate(df.groupby([''foo'']).size()): print(i, row)

no devuelve -1, 0, 1 y 2 para i sino 0, 1, 2, 3.


Actualización :

Dada una serie de pandas:

s = pd.Series([1,2,3,4], index=[''a'', ''b'', ''c'', ''d'']) s #a 1 #b 2 #c 3 #d 4 #dtype: int64

Puede realizar un ciclo directamente a través de él, lo que produce un valor de la serie en cada iteración:

for i in s: print(i) 1 2 3 4

Si desea acceder al índice al mismo tiempo, puede usar el método de items o iteritems , que produce un generador que contiene tanto el índice como el valor:

for i, v in s.items(): print(''index: '', i, ''value: '', v) #index: a value: 1 #index: b value: 2 #index: c value: 3 #index: d value: 4 for i, v in s.iteritems(): print(''index: '', i, ''value: '', v) #index: a value: 1 #index: b value: 2 #index: c value: 3 #index: d value: 4

Respuesta anterior :

Puedes llamar iteritems() método iteritems() en la serie:

for i, row in df.groupby(''a'').size().iteritems(): print(i, row) # 12 4 # 14 2

Según el doc:

Series.iteritems ()

Perdidamente iterar sobre tuplas (índice, valor)

Nota: Estos no son los mismos datos que en la pregunta, solo una demostración.