Разделите фрейм данных на более мелкие фреймы данных по именам столбцов

0

Вопрос

Итак, я выполняю задание временных рядов/LSTM, и у меня есть набор данных: https://www.kaggle.com/camnugent/sandp500

Дело в том, что мне нужно разделить основной фрейм данных на более мелкие фреймы данных по названию каждой компании. Есть ли быстрый способ сделать это? поскольку существуют десятки названий компаний, я видел, что это можно сделать с помощью iloc, но усилий слишком много.

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

grouped_df = df.groupby('Name')

Здесь это видно лучше:

enter image description here

Как вы можете видеть, существуют разные компании с разными названиями, мне нужен фрейм данных для каждой компании. Помощь очень ценится

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

Лучший ответ

1

Предположим, что это ваш фрейм данных:

 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

Затем выполните следующие действия:

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

Это сохранит все подкадры данных в формате csv. Чтобы просмотреть, что делает код:

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

ВОЗВРАТ:

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

Если вам нужно сбросить индекс в каждом df, сделайте это:

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

что дает:

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

набор данных содержит несколько полей, таких как: открыто, высоко, низко, близко... Как их добавить при преобразовании df в csv?
eneko valero

@enekovalero Вам не нужно делать ничего, кроме вышеприведенного кода. Мой df был просто примером. Все столбцы будут находиться в каждом созданном кадре данных. Он фильтруется только по имени. Для ваших будущих вопросов (или если вы хотите, чтобы я проверил ваши фактические данные), не публикуйте изображения. Вместо этого сделайте это: df.head(50).to_dict() (или любое число вместо 50) и вставьте результат между ` <здесь> ` в ваш ТАК называемый вопрос.
Serge de Gosson de Varennes

@энеко валеро...Я не думаю, что ваша концепция имеет большой смысл или вообще какой-либо смысл. Можете ли вы попробовать концепцию, указанную ниже? Вероятно, только первая 1/4 относится к тому, что вы делаете. github.com/ASH-WICUS/Notebooks/blob/master/...
ASH
0

Это должно быть выполнимо с помощью логической индексации:

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

Это будет работать, но я полагаю, что это будет довольно медленно для большого набора данных, потому что вам нужно вычислить весь логический ряд для каждого уникального имени.
Kevin Roche

На других языках

Эта страница на других языках

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