Python 熊猫-切片数据并计算平均值

Python 熊猫-切片数据并计算平均值,python,sql,sql-server,pandas,Python,Sql,Sql Server,Pandas,我有一个包裹交付数据表,其结构如下所示: route_id parcel_id loading_time other_fields X1 001 14:20 25/07/2019 ... X2 025 14:23 25/07/2019 ... ... ... ... 我想计算每个路线id每10分钟(0-10、

我有一个包裹交付数据表,其结构如下所示:

route_id      parcel_id   loading_time           other_fields
  X1          001         14:20 25/07/2019       ...
  X2          025         14:23 25/07/2019       ...
...         ...                    ...
我想计算每个路线id每10分钟(0-10、11-20、21-30)出现的所有包裹重量的平均值。因此,我想要的结果表如下所示:

route_id        time_window                                         average_weight(kg)
   X1           870 (i.e. 14:20 - 14:30,only show UpperBound)      550 
   X1           880                                                 1020
   ...          ...                                                 ...

如何在Pandas或SQL server中轻松执行此操作?

如果我理解正确,您希望每隔10分钟通过
route\u id
执行聚合。您的
加载时间也是一个字符串。首先将其转换为时间戳

以下示例使用了一些模拟数据,因为没有示例输入数据:

loading_times = np.random.choice(pd.date_range('2019-07-25 9:00', '2019-07-25 9:20', freq='T'), 10)
df = pd.DataFrame({
    'route_id': np.random.randint(1, 4, len(loading_times)),
    'weight': np.random.randint(1, 5, len(loading_times)),
    'loading_time': loading_times
})
样本数据(已排序):

然后将其分组:

def summarize(x):
    return pd.Series({
        'count': len(x),
        'avg_weight': x['weight'].mean()
    })

by = ['route_id', pd.Grouper(key='loading_time', freq='10T')]
df.groupby(by).apply(summarize)
结果:

                              count  avg_weight
route_id loading_time                          
1        2019-07-25 09:00:00    2.0         1.5
         2019-07-25 09:10:00    5.0         2.4
2        2019-07-25 09:00:00    1.0         4.0
3        2019-07-25 09:00:00    1.0         4.0
         2019-07-25 09:10:00    1.0         3.0

我们可能需要更多关于它的信息你想要什么信息?我只想计算一天中每10分钟按每个路线id显示的平均包裹体积。看看这里:我已经编辑了我的问题。1). 我想得到一个定义时间段内包裹的平均值(每10分钟,0-10,11-20,21-30)。最终结果中的加载时间是否为时间间隔的上限?2). 如何复制索引中的路由id?(1)上述输出中的
加载时间
是时段的开始时间(即从9:00到9:10之前,从9:10到9:20之前,等等)。(2) 它只是为了展示而裁剪的。
route\u id
在每一行都可用,非常感谢。我需要删除时间前面的日期吗?我想得到整个月(即30个采样日)内每个时间间隔的平均值,需要进行更多调整。1). 需要消除日期差异,因为我有兴趣捕获整个月(即30个采样日)内每个时间间隔的平均重量2)。时间间隔与结果不连续。它仅显示存在地块的时间间隔。我需要显示所有时间间隔,如果没有包裹,只需报告0。
                              count  avg_weight
route_id loading_time                          
1        2019-07-25 09:00:00    2.0         1.5
         2019-07-25 09:10:00    5.0         2.4
2        2019-07-25 09:00:00    1.0         4.0
3        2019-07-25 09:00:00    1.0         4.0
         2019-07-25 09:10:00    1.0         3.0