Python: Zufällige Auswahl pro Gruppe
Sagen, dass ich ein dataframe, das aussieht wie:
Name Group_Id
AAA 1
ABC 1
CCC 2
XYZ 2
DEF 3
YYH 3
Wie könnte ich nach dem Zufallsprinzip wählen Sie eine (oder mehrere) Zeile für jede Group_Id
? Sagen, dass ich will eine Ziehung pro Group_Id
würde ich bekommen:
Name Group_Id
AAA 1
XYZ 2
DEF 3
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom
0.16.x
abpd.DataFrame.- Beispiel
bietet einen Weg, um wieder eine zufällige Auswahl von Elementen aus einer Achse des Objekts.Mit groupby und zufällig.Wahl in einem eleganten one-liner:
random.choice(range(0,len(x)))
ist besser geschrieben alsnp.random.randint(0, len(x))
df.sample(frac = 1.0).groupby('Group_Id').head(1)
ist so viel schnellerGibt es zwei Möglichkeiten, dies zu tun ist sehr einfach, ohne irgendetwas außer basic pandas syntax:
Dieser nimmt 14.4 ms mit 50k Zeilen-dataset.
Die andere, etwas schnellere Methode ist, beinhaltet numpy.
Dieser nimmt 10.9 ms mit (der gleichen) 50k Zeilen-dataset.
Generell, bei der Verwendung von pandas, es ist besser, stick mit seiner nativen syntax. Vor allem für Anfänger.
n
Elemente pro Gruppe? 🙂bei zufälliger Auswahl nur eine Zeile pro Gruppe versuchen
df.sample(frac = 1.0).groupby('Group_Id').head(1)
Mit
random.choice
können Sie etwas wie das hier tun:Können Sie eine Kombination von
pandas.groupby
,pandas.concat
undrandom.- Beispiel
:Ausgabe: