/ / Passa attraverso ogni ennesimo gruppo di un oggetto groupby - python, panda

Passa attraverso ogni ennesimo gruppo di un oggetto groupby - python, panda

Sto attualmente iterando su un oggetto groupby nel solito modo

for key, df_reduced in df.groupby(level="level_key"):

Esiste invece un modo semplice per scorrere tutti gli ennesimi gruppi del gruppo? Ad esempio, il 1 ° gruppo, 4 ° gruppo, 7 ° gruppo ecc.

Un modo per farlo sarebbe

counter = 0
for key, df_reduced in df.groupby(level="level_key"):
counter += 1
counter = counter % 3
if counter != 0:
continue

C'è un modo più pulito per fare questo, ad es. per una lista standard di python da ripetere su ogni terzo elemento che vorrei fare

for l in list[::3]:

risposte:

2 per risposta № 1

Puoi provare GroupBy.nth

GroupBy.nth (n, dropna = None) [fonte] Prendi l'ennesima riga da ogni gruppo se n è un int, o un sottoinsieme di righe se n è un elenco di ints.

Specificando as_index = False in groupby mantiene l'indice originale.

import pandas as pd
import numpy as np

df = pd.DataFrame({"A": [1, 1, 2, 1, 2],"B": [np.nan, 2, 3, 4, 5]}, columns=["A", "B"])


print "n", df.groupby("A", as_index=False).nth(1)
print "n", df.groupby("A", as_index=False).nth(2)
print "n", df.groupby("A", as_index=False).nth(0)

produzione

   A    B
1  1  2.0
4  2  5.0

A    B
3  1  4.0

A    B
0  1  NaN
2  2  3.0