Python Pandas如何基于多列值为DataFrame新增货币转换计算列
Pandas 逐行货币转换实现方案
你之前用map处理拿不到同行货币值的问题,核心是map只能处理单列数据,没法关联同行其他字段,用下面两种方案都能直接跑通:
方案1:全量逐行计算(代码最简洁,适合小数据集)
直接按行遍历判断,逻辑和需求完全对齐:
# 替换成你需要的目标货币,比如转换为美元就填"USD" conv_currency = "CNY" df[f'currency({conv_currency})'] = df.apply( lambda r: None if r["currency"] == conv_currency else converter(r["currency"], conv_currency, r["price"]), axis=1 )
参数说明:axis=1代表按行遍历,lambda里的r就是当前行对象,可以直接通过列名取到同行的货币类型、价格两个字段,刚好匹配转换函数的三个入参要求。
方案2:仅计算需要转换的行(性能更优,适合万行以上大数据集)
你之前写的loc筛选思路是对的,只要调整下赋值逻辑即可,不需要对已经是目标货币的行做无效计算:
conv_currency = "CNY" # 先把整列初始化为None df[f'currency({conv_currency})'] = None # 筛选出所有非目标货币的行,单独计算转换值 convert_mask = df["currency"] != conv_currency df.loc[convert_mask, f'currency({conv_currency})'] = df[convert_mask].apply( lambda r: converter(r["currency"], conv_currency, r["price"]), axis=1 )
注意事项
- 不要单独对
price列调用map:map只能拿到当前列的价格值,没法获取同行的货币类型字段,自然没法凑齐转换函数的入参 - 注意变量名统一:你贴的迭代代码里一会儿用
conv_cur一会儿用conv_currency,很容易触发变量未定义的报错 - 如果你的转换函数是调用第三方接口,数据量较大时建议先按货币类型分组,统一拉取对应汇率后做批量计算,能大幅减少接口调用次数,提升运行速度
内容的提问来源于stack exchange,提问作者Kris Bell
相关产品推荐
相关产品推荐

