2017-01-10 2 views
0

Ich habe einen Pandas Datenrahmen wie unten:Auswahl zufällige Reihen von Pandas Datenrahmen basierend auf Zählungen

col1, col2, label 
a, b , cat 
b, b1, , mouse 
. 
. 
.........., elephant 
.........., mouse 

und die value_counts für Etiketten Säule:

df.dataframe.value_counts: 

cat: 7599 
mouse: 6458 
dog: 5100 
elephant: 5000 

ich mindestens N Zeilen auswählen möge von jedem Etikett Kategorie zufällig so, dass meine value_counts geworden:

cat: N 
mouse: N 
dog: N 
elephant: N 

gibt es eine "pandoic" Art, dies zu tun?

Antwort

4

Sie können zunächst Ihre DF mit sample(frac=1) Methode mischen und dann die ersten N Zeilen aus jeder Gruppe wählen (groupped von label):

df.sample(frac=1).groupby('label', sort=False).head(N) 

Demo:

In [108]: df.sample(frac=1).groupby('label', sort=False).head(3) 
Out[108]: 
    col1 label 
11  9  a 
28  4  a 
58  0  a 
96  5  c 
99  3  b 
35  6  c 
88  8  c 
97  9  b 
83  7  b 

Setup:

In [106]: df = pd.DataFrame({'label':np.random.choice(list('abc'), 100), 'col1':np.random.randint(0, 10, 100)}) 

In [107]: df 
Out[107]: 
    col1 label 
0  4  c 
1  6  b 
2  9  c 
3  0  b 
4  5  a 
5  3  a 
6  3  b 
7  6  c 
8  7  b 
9  6  a 
.. ... ... 
90  4  b 
91  5  b 
92  8  c 
93  2  c 
94  9  a 
95  2  a 
96  5  c 
97  9  b 
98  8  b 
99  3  b 

[100 rows x 2 columns] 

TIPP: Wenn Sie das maximal mögliche N finden wollen - können Sie uns e den Code folgenden (Dank an @NickilMaveli for the idea)

N = df.label.value_counts(sort=False).min() # (or) df.label.value_counts().iloc[-1] 
+1

Um diesen Fall für einen optimalen 'N' Wert zu verallgemeinern, könnte man hinzufügen' N = df.label.value_counts (normalisieren = True) .iloc [-1] * df.shape [ 0] ', von dem die Länge der niedrigsten Zählung gefunden wurde, um' .head' darauf zu nennen. –

+1

@NickilMaveli, danke! Ich habe es der Antwort hinzugefügt – MaxU

0

Sie sample mit groupby bei Bedarf beispielsweise verwenden können 60% Proben pro Gruppe:

print (df.groupby('label').apply(lambda x: x.sample(frac=0.6))) 
Verwandte Themen