将DataFrame对象上的Pandas datetime索引转换为级别为“month”和“year”的*MultiIndex*

2024-04-28 20:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个包含月度datetime指数的数据表(下面的代码给出了从1月到12月的两年时间):

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的最佳方法是什么?也许有一种方法可以用groupby来实现,但我不确定。在


Tags: 方法代码fromimportnumpypandasfordatetime
2条回答
d.index = pd.MultiIndex.from_tuples(d.reset_index()['index'].\
                                    apply(lambda x:(x.year,x.month)))

您可以从yearmonth构造一个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

相关问题 更多 >