python - 整数的 Pandas 多索引到日期时间索引?

标签 python pandas

我有一个如下所示的数据框,其中包含代表一年中月份和日期的整数的多重索引,以及那些日子的最高和最低温度记录。

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

如何将此多索引转换为 datetime 类型的单个索引?我正在寻找类似这种转换的东西:

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

在 MultiIndex 的各个级别上使用 pd.to_datetime,然后使用所需格式的 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

关于python - 整数的 Pandas 多索引到日期时间索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049663/

相关文章:

python - Django 和自定义身份验证后端(Web 服务)+ 无数据库。如何在 session 中保存内容?

python - 余弦函数的python sympy计算积分错误

python - Google Colab 中的转储文件在哪里?

python - Pandas:如何根据 ID 和条件替换面板数据集中的列值

pandas - 如何默认打印 pandas 数据框的前 n 行?

python - 在 Spyder IDE 中释放 matplotlib 内存

python - 尝试使用 python 实现快速排序,但它不起作用

python - 在带有 groupby 的时间序列列上使用 Pandas .diff()

python - 对具有多个条件的分组数据框进行自定义过滤器

python-3.x - 如何使用 Pandas 数据框中的纬度和经度计算距离?