Probe jede Gruppe nach pandas groupby
Ich weiß, das muss beantwortet sein, wo einige, aber ich konnte Sie einfach nicht finden.
Problem: Probe jede Gruppe nach groupby-Betrieb.
import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
'b': [1,1,1,0,0,0,0]})
grouped = df.groupby('b')
# now sample from each group, e.g., I want 30% of each group
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gilt ein lambda-Ausdruck und rufen
Beispiel
mit paramfrac
:[6,2]
wie oben gezeigt.reset_index(level=1)
auf die obengrouped.apply(lambda x: x.sample(nmax) if len(x) > nmax else x)
.Probe ein Bruchteil von jeder Gruppe
Können Sie
GroupBy.apply
mitBeispiel
. Sie nicht brauchen, um eine lambda;apply
nimmt Schlüsselwort-Argumente:Wenn der MultiIndex ist nicht erforderlich, Sie können
group_keys=False
zugroupby
:Probe
N
Zeilen aus jeder Gruppeapply
langsam ist. Wenn Ihr Anwendungsfall ist zum Beispiel eine Feste Anzahl von Zeilen, können Sie schieben Sie die DataFrame vorher, dann verwenden SieGroupBy.head
.Dies ist das gleiche wie
df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, n=N)
, aber schneller: