熊猫:垃圾箱日期为30分钟的间隔并计算平均线[英] Pandas: Bin dates into 30 minute intervals and calculate averages

本文是小编为大家收集整理的关于熊猫:垃圾箱日期为30分钟的间隔并计算平均线的处理方法,想解了熊猫:垃圾箱日期为30分钟的间隔并计算平均线的问题怎么解决?熊猫:垃圾箱日期为30分钟的间隔并计算平均线问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个pandas dataframe,两个列为speed和time.

speed   date
54.72   1:33:56
49.37   1:33:59
37.03   1:34:03
24.02   7:39:58
28.02   7:40:01
24.04   7:40:04
24.02   7:40:07
25.35   7:40:10
26.69   7:40:13
32.04   7:40:16
28.02   11:05:43
30.71   11:05:46
29.36   11:05:49
18.68   11:05:52
54.72   11:05:55
34.69   10:31:34
25.03   10:31:38
56.04   10:31:40
44.03   10:31:43

我想计算每箱30分钟的速度的平均值.例如,第四箱(1:31 - 2:00)的平均速度是(54.72 + 49.37 + 37.03)/3.我想到了从00:00开始转换时间,分钟和秒到秒,然后有1800秒的垃圾箱.我试图用scipy.stats使用binned_statistic,但我的主要问题是我找不到基于日期分隔垃圾箱的方法并获得平均速度.

任何想法?

推荐答案

转换为dateTime,使用pandas.Grouper + 偏移别名:

df['date'] = pd.to_datetime(df.date)
df.groupby(pd.Grouper(key='date', freq='30min')).mean().dropna()

    speed
date    
2018-09-20 01:30:00     47.040000
2018-09-20 07:30:00     26.311429
2018-09-20 10:30:00     39.947500
2018-09-20 11:00:00     32.298000

其他推荐答案

由于您的date列并不是真正的日期,它可能更明智地将其转换为timedelta,这种方式您没有附加到它的日期.

然后,您可以使用dt.floor到组到30分钟的垃圾箱.

import pandas as pd

df['date'] = pd.to_timedelta(df.date)
df.groupby(df.date.dt.floor('30min')).mean()

输出:

              speed
date               
01:30:00  47.040000
07:30:00  26.311429
10:30:00  39.947500
11:00:00  32.298000

本文地址:https://www.itbaoku.cn/post/1728059.html