2017-07-12 91 views
0

我有一個數據幀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個讀數的總和,從而將其轉換爲小時數據。例如,對於'0'小時,它是(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

選項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)) 

輸出:

Year Month Day Hour Minutes Reading 
0 2011  1 1  0  0  1.6 
1 2011  1 1  1  0  1.1 

選項2

使用​​sum和與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)) 

輸出:

Year Month Day Hour Minutes Reading 
0 2011  1 1  0  0  1.6 
1 2011  1 1  1  0  1.1 
1

如果你願意,你也可以將結果與transform分配給df

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