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

如何一次性对DataFrame的不同列应用不同函数?

一次性给DataFrame不同列应用不同函数的实用方法

嘿,这个问题我太熟了!每次手动逐个处理列确实挺麻烦的,其实Pandas有好几种优雅的方式能一次性完成这个操作,我结合常见场景给你演示:

首先先构造一个可复用的示例DataFrame,方便你测试:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'num_col': [1, 2, 3, 4],
    'str_col': ['apple', 'banana', 'cherry', 'date'],
    'float_col': [1.1, 2.2, 3.3, 4.4]
})

假设你原本的逐个操作是这样的:

# 旧的逐个处理方式
df['num_col'] = df['num_col'].apply(lambda x: x * 2)
df['str_col'] = df['str_col'].apply(lambda x: x.upper())
df['float_col'] = df['float_col'].apply(lambda x: round(x, 0))

下面是两种更高效的一次性处理方案:

方案1:用apply+函数映射字典

这种方法适合你已经明确知道每列要对应哪个函数的场景,先定义一个列名: 对应函数的字典,然后用apply批量处理:

# 定义列与函数的映射关系
func_mapping = {
    'num_col': lambda x: x * 2,       # 数值列翻倍
    'str_col': lambda x: x.upper(),   # 字符串列转大写
    'float_col': lambda x: round(x, 0)# 浮点列取整
}

# 一次性应用所有函数
df = df.apply(lambda col: func_mapping[col.name](col), axis=0)

这里的axis=0表示按列处理,col.name会自动获取当前处理的列名,然后从字典里匹配对应的函数执行。

方案2:用assign()批量赋值

assign()方法更直观,适合想要清晰看到每列处理逻辑的场景,而且支持保留原列(只需要给新列起不同名字就行):

# 一次性处理并覆盖原列(如果要保留原列,把左边的列名改成新名字即可)
df = df.assign(
    num_col=lambda x: x['num_col'] * 2,
    str_col=lambda x: x['str_col'].str.upper(),
    float_col=lambda x: x['float_col'].round(0)
)

如果想保留原列,比如生成num_col_double,只需要把num_col=改成num_col_double=就行,非常灵活。

额外技巧:只处理部分列,其他列保持不变

如果你的DataFrame有很多列,只想处理其中几列,其他列不动,可以用update()配合切片:

# 只定义需要处理的列和函数
func_mapping = {
    'num_col': lambda x: x * 2,
    'str_col': lambda x: x.upper()
}

# 只处理指定列,然后更新回原DataFrame
df.update(df[list(func_mapping.keys())].apply(lambda col: func_mapping[col.name](col)))

这样未在func_mapping里的列(比如float_col)会完全保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:34