gpt4 book ai didi

python - Pandas:将具有 DatetimeIndex 的列表字典转换为 DataFrame

转载 作者:行者123 更新时间:2023-12-01 09:07:30 25 4
gpt4 key购买 nike

我需要 pandas 专家的帮助:)我需要高效从包含两个 DatetimeIndexes 列表作为值的字典创建 DataFrame。

这是此类字典的简短示例:

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

附注实际任务是将具有日期范围的大型 DataFrame(如下所示)拆分为单个月份。

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

大的是几十万行。

最佳答案

用途:

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

关于python - Pandas:将具有 DatetimeIndex 的列表字典转换为 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com