Groupby,在基于索引值的数据帧中(每小时时间戳记)-索引中断时

时间:2018-11-09 21:11:13

标签: python pandas dataframe

我正在处理一个数据框,并且处于一种需要根据索引值将行分组在一起的情况。索引是小时时间戳,但是碰巧某些特定的小时不在数据框中(因为它们不满足特定的条件)。因此,我需要将所有连续的小时分组在一起,当缺少特定的小时时,应该创建另一个分组。

下图描述了我想要实现的目标:

enter image description here

Timestamp   Value
1/2/2017 1:00   231.903601
1/2/2017 2:00   228.225897
1/2/2017 7:00   211.998416
1/2/2017 8:00   227.219204
1/2/2017 9:00   229.203123
1/3/2017 6:00   237.907033
1/3/2017 7:00   206.684276
1/3/2017 8:00   228.4801

输出应为(开始结束日期和平均值):

     Timestamp                    Avg_Value
    1/2/2017 1:00-1/2/2017 2:00    230.06
    1/2/2017 7:00-1/2/2017 9:00    222.8
    1/3/2017 6:00-1/3/2017 8:00    224.35

能否请您帮我一个方法,请问如何使用Python数据框做到这一点? 谢谢

1 个答案:

答案 0 :(得分:2)

首先转换为Timestamp

然后通过获取一个系列的累积和来对表单进行分组,该系列将检查时间差是否不是1小时。使用.agg来获取每一列的相关计算。

import pandas as pd

df['Timestamp'] = pd.to_datetime(df.Timestamp, format='%m/%d/%Y %H:%M')
s = df.Timestamp.diff().bfill().dt.total_seconds().ne(3600).cumsum()

df.groupby(s).agg({'Timestamp': ['min', 'max'], 'Value': 'mean'}).rename_axis(None, 0)

输出:

            Timestamp                           Value
                  min                 max        mean
0 2017-01-02 01:00:00 2017-01-02 02:00:00  230.064749
1 2017-01-02 07:00:00 2017-01-02 09:00:00  222.806914
2 2017-01-03 06:00:00 2017-01-03 08:00:00  224.357136