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

基于Currency列值计算D列:Python实现多条件列求和

问题分析与正确实现

原代码存在的问题

  • 遍历方式错误:range(df['Currency']) 无法遍历Series类型数据,range() 仅接受整数参数,此处不应使用该方式遍历数据行。
  • 赋值逻辑错误:每次循环都对整个df['D']列赋值,会覆盖之前所有行的计算结果,最终仅保留最后一次循环的赋值,无法实现多条件分别计算。
  • 语法错误:else 块未填充逻辑,且函数调用rates()缩进错误,被包含在else块内,导致无法正常执行。

正确实现方式

推荐使用pandas矢量化操作(无需循环),这是pandas的最佳实践,效率更高且代码简洁:

import pandas as pd

# 假设df是你的目标DataFrame
# 初始化D列
df['D'] = pd.Series(dtype='float64')

# 按Currency条件分别赋值
df.loc[df['Currency'] == 'GBP', 'D'] = df['Column A'] + df['Column C']
df.loc[df['Currency'] == 'EUR', 'D'] = df['Column B'] + df['Column C']

# 处理未匹配条件的情况,例如设为缺失值
df['D'] = df['D'].fillna(pd.NA)

如果一定要用逐行循环(不推荐,大数据量下性能差),可以这样写:

def calculate_d_column(df):
    # 初始化D列为缺失值
    df['D'] = pd.NA
    for idx, row in df.iterrows():
        if row['Currency'] == 'GBP':
            df.at[idx, 'D'] = row['Column A'] + row['Column C']
        elif row['Currency'] == 'EUR':
            df.at[idx, 'D'] = row['Column B'] + row['Column C']
        # 其他Currency类型保持默认缺失值即可

# 调用函数生成D列
calculate_d_column(df)

说明

  • 矢量化操作通过loc精准定位符合条件的行,直接赋值对应计算结果,不会覆盖其他行数据,性能远优于逐行循环。
  • 若有其他Currency类型的处理需求,可补充对应的loc赋值逻辑,或调整默认值规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:54:23