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

如何用df.apply调用多返回值函数一次性创建DataFrame多列?

问题解答

你写的那种写法不可行,原因有两个:

  • 首先,df_RoadSegments["NewTime"]["link"]是链式索引赋值,这种操作容易触发SettingWithCopyWarning,而且NewTime本身是普通列,不是嵌套的DataFrame,没法直接给它加子列;
  • 更关键的是,你的lambda里还是每次调用getrouteinfo,完全没解决重复调用函数浪费计算的问题。

要实现一次性获取两个返回值、避免重复计算的需求,正确的做法是在apply里只调用一次getrouteinfo,取出需要的两个值后以元组返回,再用result_type="expand"参数把结果展开成两列。

给你两种实现方式:

方式一:用嵌套lambda简化写法

df_RoadSegments[["NewTime", "link"]] = df_RoadSegments.apply(
    lambda x: 
    (lambda res: (res[8], res[9]))(getrouteinfo(x["OriginCoordinates"], x["DestCoordinates"])),
    axis=1,
    result_type="expand"
)

方式二:定义独立函数,可读性更高

def extract_route_info(row):
    # 只调用一次函数,保存结果
    route_result = getrouteinfo(row["OriginCoordinates"], row["DestCoordinates"])
    # 返回需要的两个值(这里假设是索引8和9,根据你的实际需求调整)
    return route_result[8], route_result[9]

# 一次性生成两列
df_RoadSegments[["NewTime", "link"]] = df_RoadSegments.apply(extract_route_info, axis=1, result_type="expand")

这样每一行只会调用一次getrouteinfo,既避免了计算浪费,又能一次性生成你需要的两列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:39:54