Python 在groupby之后创建日期时间索引

Python 在groupby之后创建日期时间索引,python,pandas,Python,Pandas,我想在groupby函数之后恢复索引 问题是如何在Multindex中创建一个在不同列中包含年、月、日的DateTime索引 以数据帧为例: import pandas as pd import numpy as np index=pd.date_range('2011-1-1 00:00:00', '2011-1-31 23:50:00', freq='10min') df=pd.DataFrame(np.random.randn(len(index),2).cumsum(axis=0),c

我想在
groupby
函数之后恢复索引

问题是如何在Multindex中创建一个在不同列中包含年、月、日的DateTime索引

数据帧
为例:

import pandas as pd
import numpy as np

index=pd.date_range('2011-1-1 00:00:00', '2011-1-31 23:50:00', freq='10min')
df=pd.DataFrame(np.random.randn(len(index),2).cumsum(axis=0),columns=['A','B'],index=index)
然后,使用
grupby
获得每小时的总和:

day_h = df.groupby([lambda x: x.year, lambda x: x.month, lambda x: x.day,lambda x: x.hour]).mean()
这将创建一个索引,其中年、月、日和小时在单独的列中

                      A         B
2011    1   1   0    0.209908  1.196164
2011    1   1   1    0.692531  0.518185
2011    1   1   2    1.674748  0.013136
2011    1   1   3    1.674748  0.013136 
2011    1   1   4    1.674748  0.013136
2011    1   1   5    1.674748  0.013136
所需的输出将具有DateTime索引:

                 A         B
2011-1-1 00:00  0.209908  1.196164
2011-1-1 01:00  0.692531  0.518185
2011-1-1 03:00  1.674748  0.013136
2011-1-1 04:00  1.674748  0.013136
2011-1-1 05:00  1.674748  0.013136
在我的文件中缺少一些行,因此我无法使用1h timestep创建新索引

我的数据在groupby之后

其他人在上面有一个,但他们的解决方案是使用重采样。通过映射多索引中的元组以创建新索引,可以避免重采样。这将很好地处理丢失的行

day_h['new_index'] = day_h.index.map(lambda x: datetime.datetime(x[0], x[1], x[2], x[3]))
day_h.set_index('new_index')
输出:

                        A          B
new_index                                
2011-01-01 00:00:00  -1.095114   1.995776
2011-01-01 01:00:00  -2.411459   4.508794
2011-01-01 02:00:00  -1.261747   4.953709
2011-01-01 03:00:00  -0.311934   5.454112
2011-01-01 04:00:00   2.095718   6.854375
2011-01-01 05:00:00   1.696756   3.518919
2011-01-01 06:00:00   0.623589   1.740478
2011-01-01 07:00:00   0.544426   0.916016
2011-01-01 08:00:00   2.331326   0.891177

当前df有什么问题?索引显示了相对水平值,因为您在给定的一天中有多个小时,所以输出是正确的。您在这里尝试实现什么?您的groupby对象与示例df没有什么不同,因为这里的平均值是sameYes,这是正确的,但我想去掉Multindex并使用Datetime索引。您真的在
df之后吗?重采样('h',how='mean')
?@EdChum如果没有丢失值(小时,天),这将起作用<代码>重采样创建我不希望的空行。我知道我可以删除它们,但我正在寻找一种可以从多个列中提取日期的解决方案。@Edchum answer唯一缺少的是magic
x[0]
等等……谢谢@thecircus!