如何遍历DataFrame并根据每行所属国家修改对应影片的budget数值
实现方案
Pandas 优先使用向量化操作实现需求,效率远高于逐行遍历,以下是具体步骤:
步骤1:准备国家-汇率映射字典
先定义你需要的汇率规则,比如要统一将所有预算转换为美元的话,映射规则为「1单位该国货币可兑换的美元数额」,示例如下:
# 可根据你的转换需求调整汇率值、以及补全所有出现过的国家对应的汇率 country_to_usd_rate = { "USA": 1, "UK": 1.27, "China": 0.14, "France": 1.09, "Japan": 0.0069 }
步骤2:计算调整后的预算
方案A:向量化映射(最高效,推荐)
直接通过map方法匹配对应国家的汇率后计算,1行代码即可完成:
# 生成新字段存储统一单位后的预算,也可直接覆盖原budget字段 df["adjusted_budget"] = df["budget"] * df["country"].map(country_to_usd_rate) # 若要处理映射中不存在的国家,可补充fillna设置默认汇率 df["adjusted_budget"] = df["budget"] * df["country"].map(country_to_usd_rate).fillna(1)
方案B:apply 逐行处理(适合复杂逻辑)
如果调整规则不只是简单乘汇率(比如部分国家有特殊换算规则),可以用apply实现逐行判断:
def calc_adjusted_budget(row): # 可在这里扩展任意自定义逻辑 rate = country_to_usd_rate.get(row["country"], 1) return row["budget"] * rate df["adjusted_budget"] = df.apply(calc_adjusted_budget, axis=1)
方案C:iterrows 遍历(仅适合极小数据集,不推荐)
如果必须手动遍历行,可以用iterrows实现,但大数据量下性能极差,优先选前两种方案:
for idx, row in df.iterrows(): rate = country_to_usd_rate.get(row["country"], 1) df.loc[idx, "adjusted_budget"] = row["budget"] * rate
注意事项
- 提前用
df["country"].unique()查看数据集里所有出现的国家,补全映射字典里的汇率,避免出现空值 - 如果需要转换为其他基准货币(比如人民币),只需修改映射字典里的汇率为对应国家货币兑人民币的数值即可
内容的提问来源于stack exchange,提问作者user16997033
相关产品推荐
相关产品推荐

