我有以下数据帧:
col_a col_b
4 15 69.717679 0.09701
16 69.717679 0.09701
17 69.717679 0.09701
18 69.717679 0.09701
19 69.717679 0.09701
它有一个多索引,第一级代表月份(4),下一级代表月份中的某一天(1..31)。如何将多级索引转换为日期时间索引?年份值为 2013 年。
我试过这个:
pd.to_datetime(df_past.index.levels[1] + df_past.index.levels[0] + 2013, format="%d%m%Y")
但得到错误:
*** ValueError: cannot evaluate a numeric op with unequal lengths
要获取索引级别的值,您需要.get_level_values()
而不是.levels
:
pd.to_datetime(2013 * 10000 + df_past.index.get_level_values(0) * 100 +
df_past.index.get_level_values(1), format="%Y%m%d")
此外,如果将它们添加为整数值,则需要乘以 10000/100 以获得正确的格式。另一种方法是astype(str)
它们中的每一个,然后只需添加(连接)即可。
以下列表理解/zip方法将获取日期作为日期时间对象。
import datetime as dt
new_index = [dt.datetime(2013, month, day)
for month, day in zip(*[df.index.get_level_values(i) for i in (0, 1)])]