python - Pandas:将带有 DatetimeIndex 的列表的字典转换为 DataFrame
问题描述
我需要熊猫专家的帮助:) 我需要从包含两个 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
PS 实际任务是将具有日期范围(如下所示)的大型 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
推荐阅读
- amazon-web-services - 从 AWS 提取图像时,设备上没有剩余空间错误
- python - 函数'PyArray_DATA'的隐式声明
- php - 带有链接的消息并滚动到 Woocommerce 结帐详细信息
- infinispan - 缓存中的条目不会被驱逐
- c++ - '没有合适的转换函数'与 cout
- azure - 使用 Mongodb 和逻辑应用程序插入文档时出现问题
- java - 我将如何让这个程序接受扫描仪输入,直到我命令它停止接受它们
- python - 修改图形网格
- entity-framework - 可选属性,但需要输入
- php - 我需要从 Laravel 5.6 的视图中将两个参数传递给控制器