Pandas 重采样和方差不保持计时

Pandas resampling and variance doesn't keep timings

我正在使用 pandas 和以下代码对我的数据帧 df 中的一些值进行重采样:

>> df['hour'] = f.Date.dt.hour
>> df = df.set_index('Date').resample('60T').mean().reset_index()

我正确地得到了按 60 分钟重新采样的每小时的平均值,如下所示:

>> print(df)
                  date       id       mean  hour
0  2017-02-09 14:00:00  12345.0  10.000000  14.0
1  2017-02-09 15:00:00  12345.0  10.166667  15.0
2  2017-02-09 16:00:00  12345.0  10.000000  16.0
3  2017-02-09 17:00:00  12345.0  11.000000  17.0
4  2017-02-09 18:00:00  12345.0   9.583333  18.0
5  2017-02-09 19:00:00  12345.0  11.333333  19.0

如果我在相同的数据帧上执行相同的代码(在上述重采样之前),对于方差,结果是:

>> df = df.set_index('Date').resample('60T').var().reset_index()
>> print(df)
                  date   id        var  hour
0  2017-02-09 14:00:00  0.0  92.800000   0.0
1  2017-02-09 15:00:00  0.0  14.166667   0.0
2  2017-02-09 16:00:00  0.0   9.719697   0.0
3  2017-02-09 17:00:00  0.0  19.606061   0.0
4  2017-02-09 18:00:00  0.0   4.090909   0.0
5  2017-02-09 19:00:00  0.0   9.333333   0.0

你知道为什么吗?

编辑: 使用 .agg 我正确地执行了均值和中值,但方差保持为 nan。为什么?这是代码:

df = dataset.groupby(['ID',
pd.Grouper(key='Date', freq='60T')])['Value'].agg(['mean', 'median',
'var']).reset_index()

这是结果

,    ID,Date,mean,median,var
0,13834,2017-02-09 12:00:00,1.4749195494770717,1.4749195494770717,
1,13834,2017-02-09 16:00:00,4.424796460176991,4.424796460176991,
2,13834,2017-02-09 20:00:00,2.2418710493046774,2.2418710493046774,
3,13834,2017-02-10 00:00:00,2.6548672566371687,2.6548672566371687,
4,13834,2017-02-10 04:00:00,2.6548672566371683,2.6548672566371683,
5,13834,2017-02-10 08:00:00,0.5110619469026555,0.5110619469026555,

如您所见,输出中甚至没有包含方差。如何? 谢谢

GroupBy.meanGroupBy.var 会将这些计算应用于所有数字列。

在这种情况下,您定义了一个数字 'hour' 列,它在一个组中具有相同的值。例如,对于 mean,这会导致返回单个唯一值 mean([14, 14, 14, 14]) = 14。但是使用 var; var([14, 14, 14, 14]) = 0 这就是为什么在每个具有方差重采样的组中小时为 0 的原因。

您可能应该提供一个用于聚合的字典,以确保您对每一列使用正确的函数:agg({'hour': 'first', ...})