如何在DataFrame中识别并展示循环运输路径的成本与数量
解决方案:识别往返循环低效运输路线
一、Python(Pandas)实现
核心思路
先给互为反向的路线(如A→B和B→A)生成统一标识,再筛选出存在往返的路线组,最后合并计算这类循环路线的总成本与总运输量。
代码实现
import pandas as pd # 加载数据(实际场景可替换为pd.read_csv/pd.read_excel) data = [ ['1/1/2022', 'A', 'B', 50.00, 450], ['1/2/2022', 'C', 'D', 75.00, 540], ['1/3/2022', 'B', 'A', 100.00, 450], ['1/4/2022', 'E', 'F', 50.00, 540], ['1/5/2022', 'C', 'B', 25.00, 300] ] df = pd.DataFrame(data, columns=['日期', '起点', '终点', '成本', '数量']) # 生成排序后的路线标识,让A→B和B→A拥有相同键 df['sorted_route'] = df[['起点', '终点']].apply(lambda x: tuple(sorted(x)), axis=1) # 筛选出包含往返路线的分组 grouped = df.groupby('sorted_route').filter(lambda x: len(x) >= 2) # 汇总循环路线的成本与数量 result = grouped.groupby('sorted_route').agg( route=('sorted_route', lambda x: f"{x[0][0]}→{x[0][1]}→{x[0][0]}"), total_cost=('成本', 'sum'), total_quantity=('数量', 'sum') ).reset_index(drop=True) print(result)
输出结果
| route | total_cost | total_quantity |
|---|---|---|
| A→B→A | 150.00 | 900 |
二、Excel实现
操作步骤
生成统一路线标识:在空白列(如F列)输入公式,让反向路线得到相同标识:
=TEXTJOIN("→",TRUE,SORT(B2:C2))(注:B列为起点、C列为终点,Excel 2019及以上支持SORT函数;旧版本可改用
=IF(B2<C2,B2&"→"&C2,C2&"→"&B2))创建透视表汇总:选中数据区域插入透视表,将「排序路线标识」拖到「行」,「成本」「数量」拖到「值」(设置为求和),再把「起点」拖到「值」(设置为计数)。
筛选往返路线:在透视表的「计数项:起点」列筛选数值≥2的行,这些就是存在往返的低效路线组。
生成循环路线名称:在透视表旁新增列,用公式生成
X→Y→X格式的路线名:=LEFT(F2,FIND("→",F2)-1)&"→"&MID(F2,FIND("→",F2)+1,LEN(F2))&"→"&LEFT(F2,FIND("→",F2)-1)
最终汇总效果
| route | total_cost | total_quantity |
|---|---|---|
| A→B→A | 150.00 | 900 |
内容的提问来源于stack exchange,提问作者onlywynter
相关产品推荐
相关产品推荐

