You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按fare_type分组,计算各距离下不同时段的平均票价并合并

新加坡地铁轻轨票价平均计算解决方案

你要实现的需求完全可以用pandas的groupby+agg操作完成,不用复杂的三层循环,代码更简洁高效。以下是修正后的完整代码:

1. 数据读取与distance字段清洗(优化版)

import pandas as pd

# 读取数据
mrt = pd.read_csv(r'C:\Users\ASUS\Downloads\fares-for-mrt-and-lrt-effective-from-26-december-2022.csv', na_values='na')

# 清洗distance字段:移除km单位,转换为数值
mrt['distance'] = mrt['distance'].str.replace('km', '', regex=False)

def process_distance(s):
    if '-' in s:
        # 处理区间格式,取区间上限
        return float(s.split('-', 1)[1])
    elif 'Up to' in s:
        # 处理上限格式,提取数值
        return float(s.split('Up to ', 1)[1])
    elif 'Over' in s:
        # 处理超限格式,生成代表值
        base_value = float(s.split('Over', 1)[1])
        return base_value + 0.1
    else:
        # 直接转换纯数值格式
        return float(s)

# 应用清洗函数
mrt['distance'] = mrt['distance'].apply(process_distance)

2. 计算各fare_type对应distance的平均票价

# 按"票价类型(fare_type)"和"距离(distance)"分组,计算不同时段的平均票价
# 注意:将`fare`替换为你数据中实际的票价列名(比如card_fare、cash_fare等)
avg_fares = mrt.groupby(['fare_type', 'distance'])['fare'].mean().reset_index()

# 重命名列名,提升可读性
avg_fares.rename(columns={'fare': 'average_fare'}, inplace=True)

# 查看最终结果
print(avg_fares)

关键说明

  • 放弃三层循环:pandas的分组聚合是向量化实现,比手动循环效率高数倍,还能避免循环中常见的索引错误、赋值警告等问题。
  • 分组逻辑:groupby(['fare_type', 'distance'])确保同一票价类型、同一距离下的所有时段数据被合并,mean()自动计算这些时段的票价平均值。

内容的提问来源于stack exchange,提问作者mobly elliot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:45:24