Python:按时间间隔分组

5
我有一个数据框,长这样:

我正在使用Python 3.6.5和datetime.time对象作为索引

print(sum_by_time)

           Trips
  Time

00:00:00    10
01:00:00    10
02:00:00    10
03:00:00    10
04:00:00    20
05:00:00    20
06:00:00    20
07:00:00    20
08:00:00    30
09:00:00    30
10:00:00    30
11:00:00    30

我该如何按时间间隔对这个数据框进行分组以获得类似以下的结果:
                         Trips
       Time    

00:00:00 - 03:00:00        40
04:00:00 - 07:00:00        80
08:00:00 - 11:00:00       120
1个回答

4

我认为需要使用to_timedelta将索引值转换为时间增量,然后使用resample

df.index = pd.to_timedelta(df.index.astype(str))

df = df.resample('4H').sum()
print (df)
          Trips
00:00:00     40
04:00:00     80
08:00:00    120

编辑:

针对您的格式需求:

df['d'] = pd.to_datetime(df.index.astype(str))

df = df.groupby(pd.Grouper(freq='4H', key='d')).agg({'Trips':'sum', 'd':['first','last']})
df.columns = df.columns.map('_'.join)
df = df.set_index(df['d_first'].dt.strftime('%H:%M:%S') + ' - ' + df['d_last'].dt.strftime('%H:%M:%S'))[['Trips_sum']]
print (df)
                     Trips_sum
00:00:00 - 03:00:00         40
04:00:00 - 07:00:00         80
08:00:00 - 11:00:00        120

3
你比我快!这正是我想到的!未来的访问者可以使用“H”表示小时,“T”表示分钟,“M”表示月份时间间隔。 - tda
太棒了,谢谢!有没有想法让索引反映时间间隔?例如,不是写00:00:00,而是写00:00:00 - 03:00:00。 - Jad
@Jad - 已添加解决方案,请查看。 - jezrael
提取时间跨度信息的另一种方法是在索引上使用 to_period 并使用 start_timeend_time。这样就不需要再次解析时间字符串。 - Quickbeam2k1
@Quickbeam2k1 - 好主意,谢谢。我会尝试实现它。 - jezrael
如何在没有pandas的情况下实现? - huang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接