лучший способ организовать несколько фреймов данных - PullRequest
1 голос
/ 06 мая 2019

Я новичок в python и пытаюсь научиться использовать датафреймы. Я прочитал, что использование биржевых данных - хороший проект, чтобы разобраться с ними.

Итак, я нашел некоторые ежедневные данные о запасах с 1990 по 2010 год. Каждая акция имеет 5 столбцов,

Дата, Цена открытия, Высокая цена, Низкая цена и Цена закрытия

Итак, я пытаюсь найти лучший способ упорядочить данные.

Допустим, у меня есть данные для нескольких акций. Лучше ли объединить их все в один большой фрейм данных или поместить фреймы данных друг на друга? Или я пропускаю другой метод?

1 Ответ

2 голосов
/ 06 мая 2019

Предположим, у вас есть три акции с именами S1, S2 и S3, и у вас уже есть фрейм данных для каждого:

import pandas as pd

## create some fake data in format described by OP... 
stock_names = ['S1', 'S2', 'S3']

df1 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [100, 110], 'highp': [115, 120], 
  'lowp': [100, 105], 'closep': [110, 120]
})
df2 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [110, 120], 'highp': [125, 130], 
  'lowp': [110, 115], 'closep': [120, 130]
})
df3 = pd.DataFrame({
  'date': ['2019-05-05', '2019-05-06'],
  'openp': [120, 130], 'highp': [135, 140], 
  'lowp': [120, 125], 'closep': [130, 140]
})

Вот несколько способов хранения данных(в том числе два упомянутых ОП).

## scenario 1: store the dfs in a list that you can iterate over 
##             (can only access stocks by index, not name) 
df_list = [df1, df2, df3]


## scenario 2: dict of data frames -- just a better version of scenario 1 
##             (access a stock by its name, e.g. `df_dict['S1']`) 
df_dict = dict(zip(stock_names, [df1, df2, df3]))


## scenario 3: single data frame, with 'stock' field to track where rows came from. 
##             (nice bc you can do grouped aggregations easily)
stacked_df = pd.concat(
  [df.assign(stock = stock) for df, stock in zip(df_list, stock_names)])

По моему опыту, Сценарий 3 обычно (но не всегда!) Самый приятный для работы, потому что он хорошо играет с pd.DataFrame.groupby() и pd.DataFrame.aggregate() методы.Это очень удобно, если вы выполняете аналитический анализ данных в интерактивной оболочке (см. Также руководство пользователя pandas split-apply-comb * ).

Вот пример того, почему Сценарий 3 может быть хорош - просто рассчитать среднюю цену открытия и закрытия за акцию одновременно (конечно, это может быть выполнено в других сценариях, только не используя этот тип цепочки группового агрегата),

(stacked_df
  .groupby(['stock'])
  .aggregate({'openp': pd.np.mean, 'closep': pd.np.mean}))

##        openp  closep
## stock       
## S1       105     115
## S2       115     125
## S3       125     135

Вы также можете группировать по нескольким столбцам или группировать по дате и т. Д., Используя другие интересующие функции агрегирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...