0
votes

Échantillonnage stratifié disproportionné dans les pandas

Comment puis-je sélectionner une ligne de sélection aléatoire à partir de chaque groupe (colonne nom code>) dans le fichier de données suivant:

Distance   Name  Time  Order

4        31   John     9      1
0        23   Kate     3      0
2        32  Peter     2      0


0 commentaires

6 Réponses :


1
votes

Vous pouvez atteindre cet article en utilisant unique xxx


0 commentaires

0
votes

Mélangez le Dataframe: xxx

puis déposer des lignes dupliquées: xxx


0 commentaires

0
votes
df.drop_duplicates(subset='Name')



   Distance   Name  Time  Order
1        16   John     5      0
0        23   Kate     3      0
2        32  Peter     2      0

  This should help, but this not random choice, it keeps the first

0 commentaires

5
votes

Vous pouvez utiliser un groupby sur nom col et appliquer échantillon xxx


xxx

3 commentaires

Nice :) +1. J'ai juste une pensée. Si nous échantillon tout entier et groupby.head tel que ceci df.sample (df.shape [0]). Groupby ("nom"). Tête (1) pour éviter d'utiliser Appliquer . Serait-ce une différence? Je ne me souviens vraiment pas de la théorie du hasard.


@Andyle. Belle suggestion, ce serait un peu plus rapide, également Mykola Zotko a une bonne suggestion si l'on cherche une performance.


hah, j'ai totalement manqué sa solution jusqu'à ce que vous le mentionniez. Je viens de faire valoir son aussi :)



0
votes

Que diriez-vous d'utiliser aléatoire

comme ça,

importer vos données fournies, xxx

qui ressemble à ceci, xxx

puis obtenir un nom de colonne aléatoire , xxx

et ci-dessous a sélectionné "nom", xxx

bien sûr que j'aurais pu condenser cela à, xxx


0 commentaires

2
votes

Vous pouvez mélanger tous les échantillons à l'aide, par exemple, la fonction numpy code> aléatoire.permutation code>. Puis groupy code> par nom code> et prendre n premières lignes de chaque groupe:

df.iloc[np.random.permutation(len(df))].groupby('Name').head(1)


0 commentaires