Преобразование кадра данных Daily pandas в частоту минут неправильно заполняет даты - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь преобразовать дневной кадр данных частоты в минутные данные, то есть для каждой строки, я хочу, чтобы эта комбинация тикера и даты повторялась на минутной основе и в предыдущем посте ( Преобразование ежедневных пандкадр данных к частоте минут ) мне было предложено использовать метод ffil, описанный ниже, но этот подход некорректно заполняет отдельные строки для определенных тикеров на следующий день.Это показано ниже:

Таким образом, нижеприведенный кадр данных должен быть преобразован, и он работает, потому что даты последовательно:

import pandas as pd
dict1 = [
        {'ticker':'jpm','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-28','returns': 0.2},
{'ticker':'amzn','date': '2016-11-29','returns': 0.2}
]
df1= pd.DataFrame(dict1)
df1['date']      = pd.to_datetime(df1['date'])
df1=df1.set_index(['date','ticker'], drop=True)  

df_min1 = df1.unstack().asfreq('Min', method='ffill').between_time('13:30','13:32').stack()

Ниже df2 пропускает 1 день, а затем в итоговом кадре данныхdf_min2, первый тикер повторяется в первоначально пропущенную дату:

dict2 = [
        {'ticker':'jpm','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-29','returns': 0.2},
{'ticker':'amzn','date': '2016-11-30','returns': 0.2}
]
df2 = pd.DataFrame(dict2)
df2['date']      = pd.to_datetime(df2['date'])
df2=df2.set_index(['date','ticker'], drop=True)  

df_min2 = df2.unstack().asfreq('Min', method='ffill').between_time('13:30','13:32').stack()

Кто-нибудь может предложить решение?

1 Ответ

1 голос
/ 09 июля 2019

Таким образом, приведенное ниже решение работает для меня, я просто создаю новый столбец с ежедневными датами и после преобразования создаю другой ежедневный столбец и сохраняю только те строки, в которых оба совпадают:

  df['date_column']=pd.to_datetime(df.index.get_level_values(0))
  df['date_column']=pd.to_datetime(df['date_column']).dt.date

...converting dataframe...


  df['date_column2']=pd.to_datetime(df.index.get_level_values(0))
  df['date_column2']=pd.to_datetime(df['date_column2']).dt.date
  df=df[df['date_column']==df['date_column2']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...