Split dataframe în mai mică dataframe de Nume de coloană

0

Problema

Fac, deci, o serie de Timp/LSTM misiune și am un stoc de date: https://www.kaggle.com/camnugent/sandp500

Chestia este că trebuie să împartă principalele dataframe în mai mică dataframes de numele de fiecare companie. Există o modalitate rapidă de a face acest lucru? pentru că există zeci de Companii, am văzut că acest lucru poate fi făcut cu iloc dar efortul este prea mult.

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

grouped_df = df.groupby('Name')

Aici se poate observa mai bine:

enter image description here

După cum puteți vedea, există diferite companii cu nume diferite, ceea ce vreau este o dataframe pentru fiecare companie. Ajutor este apreciat

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

Cel mai bun răspuns

1

Presupunem că acest lucru este 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

Apoi efectuați următoarele:

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

Care va salva toate sub-dataframes ca csv. Pentru a vedea ce cod are:

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

se întoarce:

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

Dacă aveți nevoie pentru a reseta index în fiecare df, face acest lucru:

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

care vă oferă:

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

setul de date are unele domenii cum ar fi: deschis, mare, mic, aproape... Cum pot să le adăugați atunci când transformarea df la csv?
eneko valero

@enekovalero nu trebuie să faci nimic altceva decât codul de mai sus. Mi df a fost pur și simplu un exemplu. Toate coloanele vor fi în fiecare produs dataframe. E doar filtrat pe nume. Pentru viitorul tau întrebări (sau dacă doriți pentru a testa pe date reale), nu mai posta imagini. În loc de a face acest lucru: df.head(50).to_dict() (sau orice număr în loc de 50) și inserați codul rezultat în între `` <aici> `` în tine AȘA întrebare.
Serge de Gosson de Varennes

@eneko valero...nu cred conceptul face o mulțime de sens, sau nici un fel de sens. Poți încerca conceptul face referire mai jos? Probabil doar prima 1/4 se aplică la ceea ce faci. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Acest lucru ar trebui să fie greu de realizat cu boolean indexare:

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

Acest lucru va funcționa, dar îmi imaginez că va fi destul de lent pe un set de date de mare pentru că aveți pentru a calcula întregul boolean serie pentru fiecare nume unic.
Kevin Roche

În alte limbi

Această pagină este în alte limbi

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