web-dev-qa-db-fra.com

Python - division de la trame de données en plusieurs trames de données en fonction des valeurs de colonne et attribution d'un nom à ces valeurs

J'ai un grand ensemble de données répertoriant les produits concurrents en vente dans différentes régions du pays. Je cherche à scinder ce cadre de données en plusieurs autres en fonction de la région via un processus itératif utilisant les valeurs de colonne dans les noms de ces nouveaux cadres de données, afin que je puisse travailler séparément - par exemple. trier les informations dans chaque région par prix pour comprendre à quoi le marché ressemble. J'ai donné une version simplifiée des données ci-dessous:

Competitor  Region  ProductA  ProductB
Comp1       A       £10       £15
Comp1       B       £11       £16
Comp1       C       £11       £15
Comp2       A       £9        £16
Comp2       B       £12       £14
Comp2       C       £14       £17
Comp3       A       £11       £16
Comp3       B       £10       £15
Comp3       C       £12       £15

Je peux créer une liste des régions à l'aide de ce qui suit:

region_list=df['Region'].unique().tolist()

Ce que j’espérais utiliser dans une boucle itérative qui produirait un certain nombre de trames de données, par exemple.

df_A :

Competitor  Region  ProductA  ProductB
Comp1       A       £10       £15
Comp2       A       £9        £16
Comp3       A       £11       £16

Je pourrais le faire manuellement pour chaque région, avec le code

df_A=df.loc[df['Region']==A]

mais la réalité est que cet ensemble de données comporte un grand nombre de zones qui rendraient ce code fastidieux. Y a-t-il un moyen de créer une boucle itérative qui reproduirait cela? Une question similaire concerne la division des images de données, mais la réponse ne montre pas comment étiqueter les sorties en fonction de la valeur de chaque colonne.

Je suis assez nouveau pour Python et j'apprends toujours. Par conséquent, s'il existe une méthode différente et plus raisonnable pour aborder ce problème, je suis très ouverte aux suggestions.

25
Sarah

La subdivision en valeurs distinctes est appelée groupby. Si vous souhaitez simplement parcourir les groupes avec une boucle for, la syntaxe est la suivante:

for region, df_region in df.groupby('Region'):
    print(df_region)

  Competitor Region ProductA ProductB
0      Comp1      A      £10      £15
3      Comp2      A       £9      £16
6      Comp3      A      £11      £16
  Competitor Region ProductA ProductB
1      Comp1      B      £11      £16
4      Comp2      B      £12      £14
7      Comp3      B      £10      £15
  Competitor Region ProductA ProductB
2      Comp1      C      £11      £15
5      Comp2      C      £14      £17
8      Comp3      C      £12      £15
41
maxymoo