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

使用pandas的apply/map/applymap实现DataFrame新增自定义计算列

先修正你的基础代码问题

  1. 自定义函数参数命名不要和df变量重名,且按行处理时传入的是每行的Series对象,建议重命名参数避免混淆
  2. apply默认按列(axis=0)处理,行级处理需要指定axis=1
  3. map只能作用于Series,不能直接作用在多列DataFrame上
  4. applymap是元素级处理函数,本身不适合行级多列计算,仅做演示使用
import pandas as pd

# 初始化测试数据
df = pd.DataFrame({
    'a': [1,2,3,4,5,6,7],
    'b': [3,4,5,6,7,8,9]
})

# 自定义行计算函数,可替换为你实际业务的复杂逻辑
def custom_sum(row):
    return row['a'] + row['b']

三种函数的实现方案

1. apply实现(推荐,最适配行级复杂计算场景)

apply支持DataFrame按行/按列处理,指定axis=1即可遍历每行,把整行数据传入自定义函数,是行级业务逻辑的最优选择:

df['sum'] = df.apply(custom_sum, axis=1)

2. map实现

map是Series专属方法,只能处理单列数据,需要先把要计算的多列打包为元组,再调用map处理:

# 先把a、b两列打包为元组组成单列Series,再用map处理
def custom_sum_for_map(row_tuple):
    a, b = row_tuple
    return a + b

df['sum'] = df[['a', 'b']].apply(tuple, axis=1).map(custom_sum_for_map)

3. applymap实现(不推荐,仅做功能演示)

applymap是对DataFrame每个单独元素做处理的函数,原生不支持跨列行计算,这个场景下没有合理的原生applymap实现方式,如需强行对齐需求可以用如下逻辑,生产环境不要用:

# 本质还是依赖apply做行级处理,仅做演示,无实际使用价值
df['sum'] = df[['a', 'b']].apply(lambda x: custom_sum(x), axis=1)

运行以上任意一种可行方案后,输出的df就是你需要的预期结果。如果是实际业务的复杂行级逻辑,直接用第一种apply方案即可,可读性和可维护性最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:07