Split dataframe in piccoli dataframe da Nomi di colonna

0

Domanda

Così sto facendo una serie temporale/LSTM assegnazione e ho una stock set di dati: https://www.kaggle.com/camnugent/sandp500

Il fatto è che ho bisogno di dividere il principale dataframe in piccoli dataframes con il nome di ciascuna società. C'è un modo veloce per fare questo? perché ci sono decine di nomi di Società, ho visto che questo può essere fatto con iloc ma lo sforzo è troppo.

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

grouped_df = df.groupby('Name')

Qui si vede meglio:

enter image description here

Come si può vedere, ci sono diverse aziende con nomi diversi, quello che voglio è un dataframe per ogni azienda. Aiuto è molto apprezzato

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

Migliore risposta

1

Assumere questo è il 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

Quindi eseguire le operazioni seguenti:

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

Che ti salva tutti i sub-dataframes come csv. Per vedere quello che fa il codice:

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

restituisce:

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

Se avete bisogno di reimpostare l'indice in ogni df, fare questo:

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

che assicura:

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

il dataset contiene alcuni campi come: open, high, low, close... Come faccio ad aggiungerli quando si trasforma df csv?
eneko valero

@enekovalero non È necessario fare altro che il codice di cui sopra. Il mio df era semplicemente un esempio. Tutte le colonne saranno in ogni prodotto dataframe. È filtrato solo sul nome. Per il tuo futuro delle domande (o se mi vuoi prova su dati effettivi), non postare immagini. Invece di fare questo: df.head(50).to_dict() (o qualsiasi altro numero invece di 50) e incolla il risultato tra `` <qui> `` a in questione.
Serge de Gosson de Varennes

@eneko valero...non credo che il tuo concetto fa un sacco di senso, o di qualsiasi senso di sorta. Si può provare il concetto a cui fa seguito? Probabilmente è solo il primo 1/4 applica a ciò che si sta facendo. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Questo dovrebbe essere fattibile con un valore booleano di indicizzazione:

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

Questo funziona, ma immagino che sarà piuttosto lento su un dataset di grandi dimensioni, perché si devono calcolare l'intero boolean serie per ogni nome univoco.
Kevin Roche

In altre lingue

Questa pagina è in altre lingue

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