python - 大熊猫整数到日期时间索引的多索引?
问题描述
我有一个如下所示的数据框,其中包含表示一年中的月份和日期的整数的多索引,以及那些日子的最高和最低温度记录。
df
Min Temp Max Temp
Date Date
1 1 -88 139
2 -115 150
3 -110 139
4 -81 156
5 -80 172
... ... ...
12 2 -94 156
3 -97 172
4 -120 156
5 -124 144
6 -161 130
7 -167 135
8 -141 167
9 -135 178
10 -106 194
11 -106 161
12 -94 144
13 -92 133
14 -149 117
15 -158 117
16 -119 122
17 -111 160
18 -142 133
19 -185 130
20 -190 161
21 -167 161
22 -98 150
23 -162 139
24 -90 183
25 -125 183
26 -119 144
27 -76 130
28 -81 134
29 -117 113
30 -127 106
31 -111 122
如何将此多索引转换为日期时间类型的单个索引?我正在寻找类似这种转换的东西:
1 1 ---> January 1
1 2 ---> January 2
...
12 31 ---> December 31
解决方案
以数据框的顶部为例:
>>> df
Min Temp Max Temp
Date Date
1 1 -88 139
2 -115 150
3 -110 139
4 -81 156
5 -80 172
pd.to_datetime
在您的 MultiIndex 的各个级别上使用,然后使用strftime
您想要的格式:
df.index = pd.to_datetime(df.index.get_level_values(0).astype(str) + '-' +
df.index.get_level_values(1).astype(str),
format='%m-%d').strftime('%B %d')
>>> df
Min Temp Max Temp
January 01 -88 139
January 02 -115 150
January 03 -110 139
January 04 -81 156
January 05 -80 172
但是,因为这是一个格式化的字符串,它将不再是日期时间格式。如果您希望它是日期时间,则需要包括一年。您可以省略strftime
,它将使用默认值1900
:
df.index = pd.to_datetime(df.index.get_level_values(0).astype(str) + '-' +
df.index.get_level_values(1).astype(str),
format='%m-%d')
>>> df
Min Temp Max Temp
1900-01-01 -88 139
1900-01-02 -115 150
1900-01-03 -110 139
1900-01-04 -81 156
1900-01-05 -80 172
推荐阅读
- r - 如何在没有循环的情况下生成顺序字符向量?
- r - 合并两个 exprs() 数据帧
- c++ - 为什么我使用 `InterlockedIncrement` 来增加关键变量但仍然得到错误的答案?
- javascript - Promise 实现问题,异步无法正常工作
- python - Python - 它从文件夹返回修改日期
- ruby-on-rails - 使用不同表中的字段设计登录 - 与用户相关
- typescript - Cordova with Angular - 使用 Typescript 文件进行调试?
- android - Android Bitmap.copyPixelsFromBuffer SIGSEGV
- python - pytesseract.image_to_string() 没有给出任何输出
- android - Android重新加载网格视图自定义适配器