我正在处理一个数据框,并且处于一种需要根据索引值将行分组在一起的情况。索引是小时时间戳,但是碰巧某些特定的小时不在数据框中(因为它们不满足特定的条件)。因此,我需要将所有连续的小时分组在一起,当缺少特定的小时时,应该创建另一个分组。
下图描述了我想要实现的目标:
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数据框做到这一点? 谢谢
答案 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