Split dataframe do menších dataframe v stĺpci Mená

0

Otázka

Takže robím Časových radov/LSTM priradenie a mám zásob dataset: https://www.kaggle.com/camnugent/sandp500

Vec je, že musím rozdeliť hlavné dataframe do menších dataframes podľa mena každej firmy. Je rýchly spôsob, ako to urobiť? pretože tam sú desiatky názvy spoločností, videl som, že to môže byť vykonané s iloc ale úsilie je príliš veľa.

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

grouped_df = df.groupby('Name')

Tu je možné vidieť lepšie:

enter image description here

Ako môžete vidieť, existujú rôzne firmy s rôznymi názvami, čo chcem, je dataframe pre každú spoločnosť. Pomoc je cenený

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

Najlepšiu odpoveď

1

Predpokladajme, je to vaša 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

Potom postupujte takto:

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

Že si uložiť všetky sub-dataframes ako csv. Ak chcete zobraziť, čo kód robí:

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

vracia:

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

Ak potrebujete obnoviť index v každom df, postupujte takto:

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

ktorý dáva:

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

dataset obsahuje niektoré polia, ako sú: open, high, low, v blízkosti... Ako môžem pridať ich pri transformácii df csv?
eneko valero

@enekovalero nemusíte robiť nič iné, než vyššie uvedené kód. Môj df bol len príklad. Všetky stĺpce budú v každom vyrobené dataframe. Je to len filtrované na meno. Pre vaše budúce otázky (alebo, ak chcete, aby som test na vaše skutočné dáta), nevkladajte obrázky. Namiesto toho urobiť: df.head(50).to_dict() (alebo ľubovoľný počet namiesto 50) a vložte výsledok medzi `` <tu> ` v tebe TAK-otázka.
Serge de Gosson de Varennes

@eneko valero...nemyslím si, že váš koncept robí veľa zmysel, alebo žiadny zmysel vôbec. Môžete skúsiť pojem odkazuje nižšie? Asi len prvý 1/4 vzťahuje na to, čo robíte. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

To by malo byť realizovateľný s boolean indexovanie:

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

To bude fungovať, ale viem si predstaviť, to bude veľmi pomalý na veľké dataset, pretože máte na výpočet celý boolean série pre každý jedinečný názov.
Kevin Roche

V iných jazykoch

Táto stránka je v iných jazykoch

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