Podziel ramka danych na mniejsze ramki danych dla nazw kolumn

0

Pytanie

Tak, jestem na misji szeregów czasowych/LSTM, i mam zestaw danych: https://www.kaggle.com/camnugent/sandp500

Rzecz w tym, że muszę się podzielić głównej ramki danych na mniejsze ramki danych według nazwy każdej spółki. Czy istnieje szybki sposób zrobić to? ponieważ istnieją dziesiątki nazw firm, widziałem, że można to zrobić za pomocą iloc, ale zbyt wiele wysiłku.

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

grouped_df = df.groupby('Name')

Tutaj widać lepiej:

enter image description here

Jak widać, istnieją różne firmy z różnymi nazwami, potrzebuję ramki danych dla każdej firmy. Pomoc jest bardzo ceniona

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

Najlepsza odpowiedź

1

Załóżmy, że jest to ramka danych:

 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

Następnie wykonaj następujące kroki:

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

To zapisze wszystkie подкадры danych w formacie csv. Aby zobaczyć, co sprawia, że kod:

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

ZWROT:

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

Jeśli potrzebujesz, aby zresetować wskaźnik w każdym df, zrób to:

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

co daje:

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

zestaw danych zawiera kilka pól, takich jak: otwarcie, wysoko, nisko, blisko... Jak je dodać podczas konwersji df do pliku csv?
eneko valero

@enekovalero nie trzeba robić nic, oprócz powyższego kodu. Mój df był tylko przykładem. Wszystkie kolumny będą znajdować się w każdym utworzonym ramce danych. On filtrowany tylko z nazwy. Dla przyszłych pytań (lub jeśli chcesz, aby sprawdziłem swoje dane rzeczywiste), nie publikuj zdjęcia. Zamiast tego zrób to: df.head(50).to_dict() (lub dowolną liczbę zamiast 50) i wklej wynik między ` <tutaj> ` twój TAK zwany pytanie.
Serge de Gosson de Varennes

@энеко valero...nie sądzę, że twoja koncepcja ma ogromny sens, czy w ogóle jakiś sens. Czy możesz spróbować koncepcję, podanego poniżej? Prawdopodobnie tylko pierwsza 1/4 odnosi się do tego, co robisz. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

To powinno być wykonalne za pomocą logicznej indeksowania:

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

To będzie działać, ale przypuszczam, że to będzie dość powoli do dużego zestawu danych, bo trzeba obliczyć cały logiczny szereg dla każdego unikalnej nazwy.
Kevin Roche

W innych językach

Ta strona jest w innych językach

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