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

如何为DataFrame添加MRT票价列与统一票价列?求替代iterrows的方法

给DataFrame新增票价列的可行方法

1. 新增single trip列(统一票价)

这一步操作最简单,直接赋值即可:

df['single trip'] = 6900

2. 新增MRT票价列(按人群分档)

推荐使用向量化操作,比iterrows效率更高且不易出错,以下是几种常用实现方法:

方法一:用np.select(多条件场景清晰直观)

先导入numpy库,定义匹配条件和对应票价(把示例中的票价数值替换成你的实际业务数据):

import numpy as np

# 定义各群体的匹配条件
conditions = [
    df['concession_type'] == 1200,  # 学生群体
    df['concession_type'] == 4050,  # 国家服役人员/成人
    df['concession_type'] == 2070   # 老年人
]

# 对应各群体的MRT票价(示例数值,替换为实际票价)
fare_values = [1.0, 1.5, 0.7]

# 生成MRT票价列,default处理未匹配的特殊情况
df['MRT票价'] = np.select(conditions, fare_values, default=1.5)

方法二:用字典映射(代码简洁易维护)

构建concession_type到对应票价的映射字典,再用map批量赋值:

# 构建类型-票价映射字典
fare_map = {
    1200: 1.0,   # 学生票价
    4050: 1.5,   # 成人/国家服役人员票价
    2070: 0.7    # 老年人票价
}

# 生成MRT票价列,fillna处理未在字典中的特殊类型
df['MRT票价'] = df['concession_type'].map(fare_map).fillna(1.5)

方法三:用apply(适合复杂逻辑,效率略低)

如果需要更复杂的判断逻辑,可以用apply实现,但不建议用于超大数据集:

def calculate_mrt_fare(row):
    if row['concession_type'] == 1200:
        return 1.0
    elif row['concession_type'] == 4050:
        return 1.5
    elif row['concession_type'] == 2070:
        return 0.7
    else:
        return 1.5  # 默认返回成人票价

df['MRT票价'] = df.apply(calculate_mrt_fare, axis=1)

注:iterrows容易失败的原因是它返回的是行数据的副本,直接修改不会同步到原DataFrame,而且逐行迭代的效率远低于向量化操作,因此优先使用上述方法。

内容的提问来源于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 00:50:39