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

如何将df.apply的返回结果分别赋值给DataFrame的两个新列

pandas使用apply逐行调用返回多值的函数并赋值多列的实现方法

你原有代码的问题在于df.apply默认按列遍历,且没有对返回的多值结果做展开处理,按照以下方式修改即可实现需求:

最优实现方案

在apply方法中新增两个参数:axis=1指定逐行处理,result_type='expand'自动将函数返回的元组展开为多列,直接赋值给目标列即可:

def f(a_list):
     # 你的自定义业务逻辑
     if stuff:
          make_new_stuff_happen         
     return new_list, a_double


def main():
     # 核心修改点
     df[['new_col1', 'new_col2']] = df.apply(lambda x: f(x['some_col']), axis=1, result_type='expand')

兼容旧版本pandas的替代方案

如果你使用的pandas版本较低不支持result_type参数,也可以先接收返回的元组Series,再按索引拆分赋值:

def main():
     # 先获取每行返回的元组组成的Series
     res_series = df.apply(lambda x: f(x['some_col']), axis=1)
     # 按位置拆分赋值给两个新列
     df['new_col1'] = res_series.str[0]
     df['new_col2'] = res_series.str[1]

注意事项

  • axis=1是逐行处理的必传参数,默认axis=0会将整列数据传入自定义函数,不符合你的需求
  • .str索引器不仅可用于字符串类型的Series,对于元素为可迭代对象的Series都可以通过该方式提取对应位置的元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 20:15:03