繁体   English   中英

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

[英]Pandas - slice data and calculate averages

我有一个包裹运送数据表,看起来像下面的结构:

route_id      parcel_id   loading_time           other_fields
  X1          001         14:20 25/07/2019       ...
  X2          025         14:23 25/07/2019       ...
...         ...                    ...

我想计算每个route_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中轻松地做到这一点?

如果我对您的理解正确,那么您希望按route_id每隔10分钟执行一次汇总。 另外,您的loading_time是一个字符串。 首先将其转换为Timestamp

由于没有样本输入数据,因此以下示例使用了一些模拟数据:

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
})

样本数据(排序):

route_id  weight        loading_time
       1       2 2019-07-25 09:00:00
       1       1 2019-07-25 09:07:00
       1       4 2019-07-25 09:10:00
       1       1 2019-07-25 09:12:00
       1       2 2019-07-25 09:13:00
       1       2 2019-07-25 09:15:00
       1       3 2019-07-25 09:19:00
       2       4 2019-07-25 09:03:00
       3       4 2019-07-25 09:04:00
       3       3 2019-07-25 09:17:00

然后将其分组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM