J'ai un grand DataFrame que je dois diviser en deux (A et B), avec le même nombre de lignes à partir d'une certaine valeur de colonne dans A et B. Cette colonne a plus de 700 valeurs uniques, toutes des chaînes. Je laisse un exemple:
A Price Type 1 X 5 X 2 Y 3 Y B Price Type 4 X 6 X 7 Y 8 Y
Lors du fractionnement (au hasard), je devrais obtenir deux valeurs de X, et deux valeurs de Y dans DataFrame A et DataFrame B, comme:
XXX
Merci d'avance!
3 Réponses :
Pourriez-vous grouper par la valeur de Type et attribuer A / B à la moitié du groupe en tant que nouvelle colonne, puis copier uniquement les lignes avec l'étiquette A / B attribuée? Si vous avez besoin d'une répartition exacte, vous pouvez la baser sur la taille du groupe
Cela pourrait être une bonne idée, mais je ne sais pas comment pourrais-je la mettre en œuvre.
Vous pouvez utiliser la fonction "arry_split" de la bibliothèque numpy comme ci-dessous:
import numpy as np df_split = np.array_split(df, 2) df1 = df_split[0] df2 = df_split[1]
Désolé, cela ne fonctionne pas, il divise le bloc de données en deux et la distribution n'est pas symétrique
Ce code sera divisé en deux. Si le nombre total d'enregistrements est pair, la distribution de deux blocs de données sera égale. Si le nombre total d'enregistrements est impair, le premier df aura un enregistrement de plus que le second df. Parce que vous ne pouvez pas distribuer un nombre impair de df en deux df de manière égale.
Vous pouvez utiliser groupby (). cumcount () pour énumérer les lignes dans Type , puis % 2 pour diviser les lignes en deux groupes :
**A** Price Type groups 0 1 X 0 1 2 Y 0 4 5 X 0 6 7 Y 0 **B** Price Type groups 2 3 Y 1 3 4 X 1 5 6 X 1 7 8 Y 1
Résultat:
df['groups'] = df.groupby('Type').cumcount()%2
A,B = df[df['groups']==0], df[df['groups']==1]
Merci pour la réponse. Malheureusement, il donne un 0 pour le premier élément de chaque colonne, pas un 0 pour chaque élément d'une certaine valeur de colonne. Néanmoins, cela m'a donné une idée de continuer et cela a rendu les choses plus faciles à coup sûr!
Comment les catégories (
X,Y, etc.) sont-elles réparties?Inégalement. Il y a plus de 2000 valeurs d'une et 4 autres.