Split dataframe en petits dataframe par les Noms de colonnes

0

La question

Donc, je suis en train de faire une série de Temps/LSTM cession et j'ai un stock de dataset: https://www.kaggle.com/camnugent/sandp500

Le truc, c'est que j'ai besoin de diviser le principal dataframe en petits dataframes par le nom de chaque société. Est-il un moyen rapide de faire cela? parce qu'il y a des dizaines de noms de Société, j'ai vu que cela peut être fait avec lci mais l'effort est trop.

df = pd.read_csv('all_stocks_5yr.csv', parse_dates=['date'])
df['date'] = pd.to_datetime(df['date'])

grouped_df = df.groupby('Name')

Ici, on le voit mieux:

enter image description here

Comme vous pouvez le voir, il ya différentes entreprises avec des noms différents, ce que je veux c'est un dataframe pour chaque entreprise. L'aide est très apprécié

dataframe keras lstm pandas
2021-11-23 15:16:49
2

La meilleure réponse

1

Suppose que c'est votre dataframe:

 Name  price
0   aal      1
1   aal      2
2   aal      3
3   aal      4
4   aal      5
5   aal      6
6   bll      7
7   bll      8
8   bll      9
9   bll      8
10  dll      7
11  dll     56
12  dll      4
13  dll      3
14  dll      3
15  dll      5

Puis effectuez les opérations suivantes:

for Name, df in df.groupby('Name'):
    df.to_csv("Price_{}".format(Name)+".csv", sep=";")

Que vais enregistrer tous les sous-dataframes au format csv. Pour voir ce que fait le code:

for Name, df in df.groupby('Name'):
    print(df)

retourne:

Name  price
0  aal      1
1  aal      2
2  aal      3
3  aal      4
4  aal      5
5  aal      6
  Name  price
6  bll      7
7  bll      8
8  bll      9
9  bll      8
   Name  price
10  dll      7
11  dll     56
12  dll      4
13  dll      3
14  dll      3
15  dll      5

Si vous devez réinitialiser l'index dans chaque df, faites ceci:

for Name, df in df.groupby('Name'):
    gf = df.reset_index()
    print(gf)

ce qui donne:

index Name  price
0      0  aal      1
1      1  aal      2
2      2  aal      3
3      3  aal      4
4      4  aal      5
5      5  aal      6
   index Name  price
0      6  bll      7
1      7  bll      8
2      8  bll      9
3      9  bll      8
   index Name  price
0     10  dll      7
1     11  dll     56
2     12  dll      4
3     13  dll      3
4     14  dll      3
5     15  dll      5
2021-11-23 17:49:39

le jeu de données a certains domaines tels que: ouvert, en haut, en bas, à proximité... Comment puis-je les ajouter lors de la transformation du df au format csv?
eneko valero

@enekovalero Vous n'avez pas besoin de faire autre chose que le code ci-dessus. Mon df était simplement un exemple. Toutes les colonnes seront dans tous les produits dataframe. C'est seulement filtré sur le nom. Pour votre futur questions (ou si vous voulez me tester sur vos données réelles), ne postez pas d'images. Au lieu de faire ceci: df.head(50).to_dict() (ou n'importe quel nombre au lieu de 50) et coller le résultat dans entre `` <ici> `` en vous SI-question.
Serge de Gosson de Varennes

@eneko valero...je ne pense pas que votre concept fait beaucoup de sens, ou n'importe quel sens que ce soit. Pouvez-vous essayer le concept référencé ci-dessous? Probablement le premier 1/4 s'applique à ce que vous êtes en train de faire. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Cela devrait être faisable avec l'opérateur booléen indexation:

list_of_dataframes = [
    df[df.Name == name]
    for name
    in df.Name.unique()
]
2021-11-23 16:22:54

Cela fonctionne, mais j'imagine que ce sera assez lent sur un vaste ensemble de données parce que vous avez à calculer l'ensemble booléen série pour chaque nom unique.
Kevin Roche

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................