Pandas:基于非零值分组统计同地点配送次数
配送地点分组统计次数解决方案
原数据构造
先还原你的输入数据:
import pandas as pd df = pd.DataFrame( {'Distance': [10, 0, 0, 3, 2, 0]}, index=[1, 2, 3, 4, 5, 6] )
实现代码
通过生成分组标识、统计分组大小的方式,直接得到目标列:
# 生成分组ID:每遇到非0的Distance就开启新分组 df['group_id'] = (df['Distance'] != 0).cumsum() # 统计每个分组的配送次数 counts = df.groupby('group_id').size() # 将次数映射回原表,生成目标列 df['Nb_Deliveries'] = df['group_id'].map(counts) # 移除临时分组列(可选操作) df = df.drop('group_id', axis=1)
输出结果
执行后得到的DataFrame如下:
Distance Nb_Deliveries 1 10 3 2 0 3 3 0 3 4 3 1 5 2 2 6 0 2
逻辑说明
(df['Distance'] != 0).cumsum():非0值会生成1,累加后形成连续的分组ID,所有后续的0会和最近的非0值归为同一组。groupby('group_id').size():计算每个分组的行数,也就是该地点的总配送次数。- 最后通过
map将次数赋值给组内每一行,完成需求。
内容的提问来源于stack exchange,提问作者Movilla
相关产品推荐
相关产品推荐

