假设我有一个每月 datetime
的数据表指数(以下代码给出了两年,从一月到十二月):
import pandas as pd
import numpy as np
from datetime import datetime
N = 12*2
c = [datetime(1970 + i//12, (i%12)+1, 1) for i in range(N)]
d = pd.DataFrame(np.random.rand(N), index=c)
print(d)
转换 DateTimeIndex
的最佳方法是什么?进入MultiIndex
与单独的级别 month
和 year
?也许有办法用 groupby
做到这一点,但我不确定。
最佳答案
您可以根据year
和month
构造一个MultiIndex
对象并将其分配给数据框的索引:
import pandas as pd
d.index = pd.MultiIndex.from_arrays([d.index.year, d.index.month])
d.index
# MultiIndex(levels=[[1970, 1971], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]],
# labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]])
d.head()
# 0
#1970 1 0.657130
# 2 0.047241
# 3 0.984799
# 4 0.868508
# 5 0.678536
关于python - 将 DataFrame 对象上的 Pandas 日期时间索引转换为级别为 "month"和 "year"的 *MultiIndex*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42640166/