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

Pandas:如何将行内多值传入函数并根据结果替换指定值

问题:如何将DataFrame行内多个字段值传入apply函数?

场景还原

原本处理单个字段时,能正常将行内单个值传入函数并更新结果:

m = df["value_a"].isin(a_list)
df.loc[m, "value_b"] = df.loc[m, "value_a"].apply(lambda x: get_new_value_b(arg1, x))

但尝试传入多个字段时,函数接收到的是整列数据而非单行的两个值:

df.loc[m, "value_b"] = df.loc[m, ["value_a", "value_c"]].apply(lambda x: get_new_value_b(arg1, x))

...

def get_new_value_b(arg1, x):
    print("x: {x}".format(x=x))
    ...

# 输出示例(x是整列的Series,不是单行值)
# x: 
# 0    ...
# 1    ...
# ...
# Name: value_a, dtype: object

解决方案

问题出在apply的默认参数axis=0(按列处理),只需将其改为axis=1即可按行处理,从而获取单行的多个字段值。

方式一:直接传递单个字段值

修改apply调用并调整函数参数:

# 调用时指定axis=1,lambda接收行对象,提取对应字段传入函数
df.loc[m, "value_b"] = df.loc[m, ["value_a", "value_c"]].apply(lambda row: get_new_value_b(arg1, row["value_a"], row["value_c"]), axis=1)

# 对应调整函数,接收两个字段参数
def get_new_value_b(arg1, val_a, val_c):
    print(f"val_a: {val_a}, val_c: {val_c}")
    # 编写基于val_a和val_c计算新value_b的逻辑
    return calculated_value

方式二:传递整行对象

如果需要用到更多字段,也可以直接把行对象传入函数,在函数内提取所需值:

# 调用时传递整行对象
df.loc[m, "value_b"] = df.loc[m, ["value_a", "value_c"]].apply(lambda row: get_new_value_b(arg1, row), axis=1)

# 函数内提取字段值
def get_new_value_b(arg1, row):
    val_a = row["value_a"]
    val_c = row["value_c"]
    print(f"val_a: {val_a}, val_c: {val_c}")
    # 计算逻辑
    return calculated_value

原理说明

apply默认axis=0时,会遍历每一列,将列作为Series传入函数;设置axis=1后,会遍历每一行,将行作为Series传入函数,此时就能获取到该行的value_a和value_c的单个值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:27:11