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

Python中基于多DataFrame行列表逐行应用函数的问题

问题解决:DataFrame逐行传参到多参数函数的错误修复

错误原因

你遇到的<lambda>() missing 2 required positional arguments错误,本质是:

  • out2.apply(axis=1)仅会把当前行的Series作为唯一参数传给lambda,但你的lambda定义了3个参数,参数数量不匹配;
  • 更关键的是out2是空DataFrame,本身不包含tsol、rfsol、rbsol的行数据,无法从这里获取需要的参数。

正确实现方案

方案1:用zip遍历多DataFrame的行(高效直观)

直接通过zip同步遍历三个DataFrame的每行,将每行转成列表后传入函数:

import pandas as pd

t=[1,2,3,4,5]
rf=[6,7,8,9,10]
rb=[11,12,13,14,15]

def simple_func(t, rf, rb):
    x=sum(t)
    y=sum(rf)
    z=sum(rb)
    return x+y+z

# 构造示例DataFrame
tsol=pd.DataFrame([t]*10)
rfsol=pd.DataFrame([rf]*10)
rbsol=pd.DataFrame([rb]*10)

# 同步遍历三个DataFrame的每行,应用函数
results = []
for t_row, rf_row, rb_row in zip(tsol.itertuples(index=False), 
                                 rfsol.itertuples(index=False), 
                                 rbsol.itertuples(index=False)):
    results.append(simple_func(list(t_row), list(rf_row), list(rb_row)))

out2 = pd.DataFrame({'output': results})

方案2:合并DataFrame后用apply(适合依赖apply的场景)

如果坚持要用apply,可以先把三个DataFrame合并,再从合并后的每行中提取对应列转成列表:

import pandas as pd

t=[1,2,3,4,5]
rf=[6,7,8,9,10]
rb=[11,12,13,14,15]

def simple_func(t, rf, rb):
    x=sum(t)
    y=sum(rf)
    z=sum(rb)
    return x+y+z

# 构造示例DataFrame
tsol=pd.DataFrame([t]*10)
rfsol=pd.DataFrame([rf]*10)
rbsol=pd.DataFrame([rb]*10)

# 合并三个DataFrame,给列加前缀区分来源
combined_df = pd.concat(
    [tsol.add_prefix('t_'), rfsol.add_prefix('rf_'), rbsol.add_prefix('rb_')],
    axis=1
)

# 对合并后的每行应用函数,提取对应列转成列表
out2 = combined_df.apply(
    lambda row: simple_func(
        t=row.filter(like='t_').tolist(),
        rf=row.filter(like='rf_').tolist(),
        rb=row.filter(like='rb_').tolist()
    ),
    axis=1
).to_frame(name='output')

两种方案最终都会生成一个长度为10、所有值为120的output列DataFrame,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:05:21