Split dataframe en pequeñas dataframe por los Nombres de columna

0

Pregunta

Así que estoy haciendo una serie de Tiempo/LSTM asignación y tengo un stock de conjunto de datos: https://www.kaggle.com/camnugent/sandp500

La cosa es que necesito dividir el principal dataframe en pequeñas dataframes por el nombre de cada empresa. Hay una forma rápida de hacer esto? porque hay decenas de nombres de empresas, he visto que esto se puede hacer con iloc, pero el esfuerzo es demasiado.

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

grouped_df = df.groupby('Name')

Aquí se puede ver mejor:

enter image description here

Como usted puede ver, hay diferentes empresas con diferentes nombres, lo que yo quiero es un dataframe para cada empresa. Ayuda se agradece mucho

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

Mejor respuesta

1

Se supone que esto es su 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

A continuación, haga lo siguiente:

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

Que voy a guardar todos los sub-dataframes como csv. A ver qué hace el código:

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

devuelve:

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 usted necesita para restablecer el índice en cada df, hacer esto:

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

lo que da:

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

el conjunto de datos tiene algunos campos, tales como: open, high, low, cerca de... ¿Cómo puedo agregar al transformar el df a csv?
eneko valero

@enekovalero Usted no necesita hacer nada más de lo que el código anterior. Mi df era simplemente un ejemplo. Todas las columnas serán en todos producidos dataframe. Se filtran en el nombre. Para sus preguntas futuras (o si quieres poner a prueba en los datos reales), no publiques imágenes. En lugar de hacer esto: df.head(50).to_dict() (o cualquier número en lugar de 50) y pegar el resultado en entre `` <aquí> `` en usted ASÍ-pregunta.
Serge de Gosson de Varennes

@eneko valero...no creo que su concepto tiene mucho sentido, o sentido en absoluto. Puede usted tratar el concepto hace referencia a continuación? Probablemente sólo el primer 1/4 se aplica a lo que está haciendo. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Este debe ser factible con booleana de indización:

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

Esto va a funcionar, pero me imagino que será bastante lento en un gran conjunto de datos, porque tienes que calcular el entero booleano de la serie para cada nombre único.
Kevin Roche

En otros idiomas

Esta página está en otros idiomas

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