Панды: конвертировать Dict из списков с DatetimeIndex в DataFrame

1

Мне нужна помощь от экспертов pandas :) Мне нужно эффективно создавать DataFrame из словаря, который содержит список из двух значений DatetimeIndexes в качестве значений.

Вот краткий пример такого словаря:

import pandas as pd

d = {
  871:[pd.date_range('20180131', '20180331', freq='M', normalize=True),
       pd.date_range('20180228', '20180430', freq='M', normalize=True)],
  872:[pd.date_range('20180228', '20180331', freq='M', normalize=True),
       pd.date_range('20180331', '20180430', freq='M', normalize=True)]}

d
Out[3]: 
{871: [DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31'], dtype='datetime64[ns]', freq='M'),
  DatetimeIndex(['2018-02-28', '2018-03-31', '2018-04-30'], dtype='datetime64[ns]', freq='M')],
 872: [DatetimeIndex(['2018-02-28', '2018-03-31'], dtype='datetime64[ns]', freq='M'),
  DatetimeIndex(['2018-03-31', '2018-04-30'], dtype='datetime64[ns]', freq='M')]}

То, что я хочу получить, - это DataFrame, где ключи dict используются как индексы и два столбца pd.Timestamp, которые соответствуют этим двум DatetimeIndexes сверху.

Вот как это должно выглядеть:

result_df
Out[6]: 
         Start        End
871 2018-01-31 2018-02-28
871 2018-02-28 2018-03-31
871 2018-03-31 2018-04-30
872 2018-02-28 2018-03-31
872 2018-03-31 2018-04-30

PS Реальная задача состоит в том, чтобы разделить большой DataFrame на диапазоны дат, например ниже, на отдельные месяцы.

df_original
Out[19]: 
           Start        End
Index                      
871   2018-01-31 2018-02-28
872   2018-02-28 2018-04-30

Большой - несколько сотен тысяч строк.

Теги:
pandas

1 ответ

1
Лучший ответ

Использование:

d1 = {k: pd.DataFrame(list(zip(*v)), columns=['Start','End']) for k, v in d.items()}
df = pd.concat(d1).reset_index(level=1, drop=True)
print (df)
         Start        End
871 2018-01-31 2018-02-28
871 2018-02-28 2018-03-31
871 2018-03-31 2018-04-30
872 2018-02-28 2018-03-31
872 2018-03-31 2018-04-30
  • 0
    В настоящее время он реализован почти так же, как это. Есть ли возможность построить DataFrame без зацикливания на элементах dict?
  • 0
    @AlexanderM. - думаю, нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню