0
votes

Split Pandas Dataframe basé sur la valeur de la colonne de chaîne

Je me lance d'essayer de scinder mon Dataframe en 3 nouveaux Dataframes où la scission se produit lorsque le nom du fournisseur change. J'ai cherché des questions existantes. Comment scindera DataFrame sur la ligne de colonnes et Pandas & Python: Split Dataframe en plusieurs DataFrames basés sur la valeur de colonne contenant la sous-chaîne est arrivé à proximité mais je ne peux pas obtenir la sortie que je veux.

Voici attaché un jeu de données jouet pour illustrer mon problème: p> xxx pré>

et j'ai essayé (sans succès) p> xxx pré>

Le résultat que j'essaie d'atteindre est le suivant: P>

 df3 = pd.DataFrame.from_dict({i:group for i,group in df1.groupby(df1['Supplier'].ne(df1['Supplier'].shift()).cumsum() )},orient='index', columns= ['Class'])
AttributeError: 'dict' object has no attribute 'groupby'


0 commentaires

3 Réponses :


3
votes

Pour créer DataFrame pour Valeurs de fournisseur uniques : XXX

Pour créer DataFrame chaque fois la valeur dans le fournisseur Changements : xxx

update

Obtention de trois données distincts est incompatible avec vouloir utiliser < code> pd.dataframe (..) à la fin, cela créera évidemment un fichier de données unique, donc ma solution était de créer un dictionnaire Dataframe où chacun est accessible pour une valeur entière de 1 à n. Nous pouvons réinitialiser l'index pour chacun d'entre eux, simplement en faisant: xxx

Nous pouvons obtenir une seule image de données avec l'index restauré chaque fois qu'il y a une modification de valeur dans le Colonne de fournisseur utilisant pd.concat comme @ anky_91 suggéré xxx


mais si ce dernier est la solution recherchée Nous pourrions simplement utiliser groupby.cumcount xxx


3 commentaires

Cette seconde fait le travail! mais donne un dictionnaire, pd.dataframe.from_dict ne fonctionne pas


Pourriez-vous montrer la sortie de pd.dataframe.from_dict Modification de votre question? Merci !:)


un autre correspondant à l'index que Spectacle op est pd.concat ([i.Reset_index (goutte = vrai) pour _, i dans df.groupby ("fournisseur"]) , mais pas sûr pourquoi faire pourquoi faire Ils ont les colonnes pour chaque itération comme rangée



0
votes

Essayez ceci, xxx

ou vous pouvez faire, xxx

pour obtenir de nombreuses colonnes si vous avez des "fournisseurs".

sortie: xxx


1 commentaires

Imaginez qu'il y a 100 valeurs de fournisseur



0
votes

Je crois que cela atteint la fractionnement que vous souhaitez:

    Supplier Class
0  Supplier1     A
1  Supplier1     A
    Supplier Class
0  Supplier2     A
1  Supplier2     A
2  Supplier2     A
    Supplier Class
0  Supplier3     B
1  Supplier3     B


1 commentaires

Cela ne fournit aucune nouvelle idée, ni ne donne la sortie souhaitée car vous n'avez pas défini goutte = vrai