Dividir dataframe em menor dataframe por Nomes de coluna

0

Pergunta

Então, eu estou fazendo uma série de Tempo/LSTM atribuição e eu tenho um conjunto de dados de estoque: https://www.kaggle.com/camnugent/sandp500

A coisa é que eu preciso dividir o principal dataframe em menor dataframes com o nome de cada empresa. Existe uma maneira rápida de fazer isso? porque há dezenas de nomes de empresas, tenho visto que isso pode ser feito com iloc mas o esforço é muito grande.

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

grouped_df = df.groupby('Name')

Aqui pode ser visto melhor:

enter image description here

Como você pode ver, existem diversas empresas com nomes diferentes, o que eu quero é uma dataframe para cada empresa. Ajuda é muito apreciada

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

Melhor resposta

1

Suponha que esse é o 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

Em seguida, faça o seguinte:

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

Que vou guardar todos os sub-dataframes como csv. Para ver o que o código faz:

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

retorna:

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 você necessitar de repor o índice em todos df, faça isso:

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

o que dá:

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

o conjunto de dados tem alguns campos, tais como: abrir, alta, baixa, perto... Como faço para adicioná-los ao transformar o df para csv?
eneko valero

@enekovalero Você não precisa fazer mais nada do que o código acima. Minha df foi simplesmente um exemplo. Todas as colunas serão todos produzidos dataframe. É apenas filtrado no nome. Para o seu futuro de perguntas (ou se você quer me testar no seu real de dados), não poste imagens. Em vez de o fazer: df.head(50).to_dict() (ou qualquer número em vez de 50) e colar o resultado em entre `` <aqui> `` em você TÃO-pergunta.
Serge de Gosson de Varennes

@eneko valero...eu não acho que o seu conceito faz muito sentido, ou em qualquer sentido que seja. Você pode tentar o conceito referenciado abaixo? Provavelmente apenas o primeiro 1/4 aplica-se o que você está fazendo. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Este deve ser factível com um valor booleano de indexação:

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

Isto irá funcionar, mas eu imagino que vai ser muito lento em um grande conjunto de dados, porque você tem que calcular todo o boolean série para cada nome exclusivo.
Kevin Roche

Em outros idiomas

Esta página está em outros idiomas

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