python - 如何使用列名(年)和索引(日/月)将所有值重新索引为日期时间类型
问题描述
这是我的 DataFrame 的示例:
2016 2017 2018 2019 2020 2021
Date
01/01 7.911808 0.913360 9.256094 7.263467 5.459530 2.856667
02/01 9.166619 3.000757 9.671416 6.167104 6.813601 2.255417
这是重现示例的数据:
{'2016': {'01/01': 7.91180835607475, '02/01': 9.166619186818957},
'2017': {'01/01': 0.9133599067435504, '02/01': 3.00075717302118},
'2018': {'01/01': 9.256094179303766, '02/01': 9.671415667353237},
'2019': {'01/01': 7.263467475115588, '02/01': 6.167104485385209},
'2020': {'01/01': 5.459530161206799, '02/01': 6.8136014047445785},
'2021': {'01/01': 2.8566666666666665, '02/01': 2.2554166666666666}}
我想同时使用列和索引来创建一个包含每个值和日期的两列 DataFrame,例如:
date value
0 2016-01-01 00:00:00 value_0
1 2017-01-01 00:00:00 value_1
2 2018-01-01 00:00:00 value_2
3 2019-01-01 00:00:00 value_3
4 2020-01-01 00:00:00 value_4
5 2021-01-01 00:00:00 value_5
6 2016-01-02 00:00:00 value_7
7 2017-01-02 00:00:00 value_8
8 2018-01-02 00:00:00 value_9
9 2019-01-02 00:00:00 value_10
10 2020-01-02 00:00:00 value_11
11 2021-01-02 00:00:00 value_12
12 . . . . . .
解决方案
DataFrame.stack
与转换为日期时间一起使用MultiIndex
,最后转换Series
为DataFrame
:
df1 = df.stack()
df1.index = pd.to_datetime(df1.index.map(lambda x: f'{x[0]} {x[1]}'), dayfirst=True)
df1 = df1.rename_axis('date').reset_index(name='value')
print (df1)
date value
0 2016-01-01 7.911808
1 2017-01-01 0.913360
2 2018-01-01 9.256094
3 2019-01-01 7.263467
4 2020-01-01 5.459530
5 2021-01-01 2.856667
6 2016-01-02 9.166619
7 2017-01-02 3.000757
8 2018-01-02 9.671416
9 2019-01-02 6.167104
10 2020-01-02 6.813601
11 2021-01-02 2.255417
推荐阅读
- ruby-on-rails - 努力获取 CSV 报告以在请求时加载
- authentication - 使用 JWT 时如何返回特定的状态码
- c# - 由于配置的标识不正确,无法启动服务器进程。检查用户名和密码
- javascript - Javascript href 导航到不属于我的其他 url 然后自动滚动到一个类
- python - 让所有边连接到 NetworkX 中多向图中的一组节点的最快方法?
- regex - 如何使用.htaccess将带有查询字符串的url重定向到带有查询字符串的另一个url
- terraform - 使用 terraform-cloudflare 提供程序的 Cloudflare 页面规则不会更新页面规则
- javascript - addEventListener 输入键码不起作用
- python-3.x - 矩阵乘法 Python
- xcode - 无法在与 Xcode 断开连接的设备上运行我的应用程序