campione casuale per gruppo, con min_rows
Sep 09 2020
Ho un dataframe e voglio provarlo. Tuttavia, durante il campionamento casuale, voglio avere almeno 1 campione da ogni elemento nella colonna. Voglio anche che anche la distribuzione abbia un effetto. (Es: i valori con più campioni sull'originale hanno di più sul df campionato)
Simile a questa e questa domanda, ma con una dimensione minima del campione per gruppo.
Diciamo che questo è il mio df:
df = pd.DataFrame(columns=['class'])
df['class'] = [0,0,0,0,0,0,0,0,0,0,0,0,0,1,2]
df_sample = df.sample(n=4)
E quando provo questo, voglio che df_sample abbia il seguente aspetto:
Class
0
0
1
2
Grazie.
Risposte
Mathieu Sep 09 2020 at 22:11
Come suggerito da @YukiShioriii potresti:
1 - campiona una riga di ogni gruppo di valori
2 - campiona in modo casuale le righe rimanenti indipendentemente dai valori
RichieV Sep 09 2020 at 22:24
Seguendo il suggerimento di YukiShioriii e mprouveur
# random_state for reproducibility, remove in production code
sample = df.groupby('class').sample(1, random_state=1)
sample = sample.append(
df[~df.index.isin(sample.index)] # only rows that have not been selected
.sample(n=sample_size-sample.shape[0]) # sample more rows as needed
).sort_index()
Produzione
class
2 0
4 0
13 1
14 2