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

Pandas中如何用单个def函数返回两值分别赋值给两列?

解答

完全可以通过单个自定义函数实现同时返回两个值、填充DataFrame两列的需求,不需要编写两个逻辑高度重复的函数。

单函数实现方式

使用apply(axis=1)逐行处理数据时,只要让函数返回长度与目标列数一致的可迭代对象(元组、列表均可),配合result_type='expand'参数,pandas就会自动将返回值拆分为独立列,直接完成多列赋值。
匹配你原有逻辑的代码如下:

def code_process(row):
    code_val = row['Code']
    concordance_val = row['Concordance']
    if pd.isna(concordance_val):
        # 返回值顺序需和等号左侧的列顺序一一对应:第一个给Acronyme,第二个给Concordance
        return (None, None)
    return (concordance_val, code_val)

# 一次性完成两列赋值
ListeCodeNova[['Acronyme', 'Concordance']] = ListeCodeNova.apply(code_process, axis=1, result_type='expand')

这段代码的运行结果和你原本写两个独立函数的效果完全一致。

更高效的替代方案

如果你的数据集体量较大,逐行apply的运行效率很低。你的判断逻辑非常简单,完全可以用pandas原生向量化操作实现,不需要自定义函数,运行速度会有量级提升:

import numpy as np

# 标记Concordance为空值的行
na_mask = ListeCodeNova['Concordance'].isna()
# 按规则批量赋值
ListeCodeNova['Acronyme'] = np.where(na_mask, None, ListeCodeNova['Concordance'])
ListeCodeNova['Concordance'] = np.where(na_mask, None, ListeCodeNova['Code'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:30:51