熊猫重新采样和变化不会保持定时

时间:2019-09-07 17:45:39

标签: python pandas variance

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

>> 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,
如您所见

,输出中甚至不包含方差。怎么样? 谢谢

1 个答案:

答案 0 :(得分:0)

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

在这种情况下,您定义了一个数字'hour'列,该列与组中的值相同。对于mean,出于保险起见,这将返回单个唯一值mean([14, 14, 14, 14]) = 14。但是用var; var([14, 14, 14, 14]) = 0,这就是为什么每组中的小时为0并进行方差重采样的原因。

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