从python pandas中的15分钟间隔数据中提取每小时数据

时间:2017-07-12 15:10:38

标签: python pandas dataframe

我有一个数据帧df:

Year Month  Day Hour Minute Reading
2011   1     1    0     0      1
2011   1     1    0    15     0.2
2011   1     1    0    30     0.4
2011   1     1    0    45     0.0
2011   1     1    1     0     0.2 
2011   1     1    1    15     0.5 
2011   1     1    1    30     0.3 
2011   1     1    1    45     0.1

上述数据帧有15分钟的间隔数据。我希望添加一个新列并获得每4个读数的总和,从而将其转换为每小时数据。例如,对于'小时,它是(1 + 0.2 + 0.4 + 0.0 = 1.6)。

因此我的输出应该如下:

Year Month  Day Hour Minute Hourly_Reading
2011   1     1   0     0        1.6
2011   1     1   1     0        1.1

有人可以指导我吗?

2 个答案:

答案 0 :(得分:2)

选项1

您可以使用[^=]

groupby

输出:

(df.groupby(['Year','Month','Day','Hour'])['Reading']
    .sum()
    .reset_index()
    .assign(Minutes=0)
    .reindex_axis(['Year','Month','Day','Hour','Minutes','Reading'],axis=1))

选项2

Year Month Day Hour Minutes Reading 0 2011 1 1 0 0 1.6 1 2011 1 1 1 0 1.1 set_indexsum参数一起使用:

level

输出:

(df.set_index(['Year','Month','Day','Hour'])['Reading']
    .sum(level=[0,1,2,3])
    .reset_index()
    .assign(Minutes=0)
    .reindex_axis(['Year','Month','Day','Hour','Minutes','Reading'],axis=1))

答案 1 :(得分:1)

如果您愿意,还可以使用df将结果分配给transform

df['Hourly_Reading'] = df.groupby(['Month', 'Hour'])['Reading'].transform('sum')

结果:

  Year  Month  Day  Hour  Minute  Reading  Hourly_Reading
0  2011      1    1     0       0      1.0             1.6
1  2011      1    1     0      15      0.2             1.6
2  2011      1    1     0      30      0.4             1.6
3  2011      1    1     0      45      0.0             1.6
4  2011      1    1     1       0      0.2             1.1
5  2011      1    1     1      15      0.5             1.1
6  2011      1    1     1      30      0.3             1.1
7  2011      1    1     1      45      0.1             1.1
相关问题