繁体   English   中英

将时间戳汇总到15分钟(以小时为单位),并找到熊猫中多列的总和,平均和最大值

[英]Aggregate to 15min based timestamp to hour and find sum, avg and max for multiple columns in pandas

我有一个每15分钟就有一个period_start_time的数据框,现在我需要合计到1小时,并为数据框中的几乎每一列(它大约有20列)计算总和和平均值

    PERIOD_START_TIME       ID      val1     val2
    06.21.2017 22:15:00      12       3        0
    06.21.2017 22:30:00      12       5        6
    06.21.2017 22:45:00      12       0        3
    06.21.2017 23:00:00      12       5        2
    ...
    06.21.2017 22:15:00      15       9        2
    06.21.2017 22:30:00      15       0        2
    06.21.2017 22:45:00      15       1        5
    06.21.2017 23:00:00      15       0        1
    ...

    Desired output: 
   PERIOD_START_TIME        ID    val1(avg) val1(sum) val1(max) ...
   06.21.2017 22:00:00      12      3.25       13         5     
     ...
   06.21.2017 23:00:00      15      2.25       10         9    ...

对于val2列,以及数据帧中的所有其他列。 我不知道如何按时段(而不是整天)对时段开始时间进行分组,也不知道如何开始。

我相信你需要Series.dt.floorHour秒,然后通过总agg

df = df.groupby([df['PERIOD_START_TIME'].dt.floor('H'),'ID']).agg(['mean','sum', 'max'])
#for columns from MultiIndex
df.columns = df.columns.map('_'.join)
print (df)
                        val1_mean  val1_sum  val1_max  val2_mean  val2_sum  \
PERIOD_START_TIME   ID                                                       
2017-06-21 22:00:00 12   2.666667         8         5          3         9   
                    15   3.333333        10         9          3         9   
2017-06-21 23:00:00 12   5.000000         5         5          2         2   
                    15   0.000000         0         0          1         1   

                        val2_max  
PERIOD_START_TIME   ID            
2017-06-21 22:00:00 12         6  
                    15         5  
2017-06-21 23:00:00 12         2  
                    15         1  

df = df.reset_index()
print (df)
  PERIOD_START_TIME  ID  val1_mean  val1_sum  val1_max  val2_mean  val2_sum  \
0  2017-06-21 22:00  12   2.666667         8         5          3         9   
1  2017-06-21 22:00  15   3.333333        10         9          3         9   
2  2017-06-21 23:00  12   5.000000         5         5          2         2   
3  2017-06-21 23:00  15   0.000000         0         0          1         1   

   val2_max  
0         6  
1         5  
2         2  
3         1  

同样,您可以将PERIOD_START_TIME转换为熊猫时期。

df['PERIOD_START_TIME'] = df['PERIOD_START_TIME'].dt.to_period('H')
df.groupby(['PERIOD_START_TIME', 'ID']).agg(['max', 'min', 'mean']).reset_index()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM