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

如何在Pandas中对多列同时使用apply函数?

在Pandas中对多列使用apply函数的方法

当然可以在Pandas里对多列调用apply函数!不过你提供的代码有两处需要调整的细节,我会一步步帮你梳理正确的实现方式,满足你生成Duration列的需求。

一、用apply处理多列的核心要点

默认情况下,apply是按列执行运算的,如果你需要同时处理一行里的多列数据,必须指定axis=1参数(表示按行遍历)。另外,选取多列时要使用双层方括号[['列名1', '列名2', '列名3']],单层方括号会导致索引错误。

正确代码示例

先导入必要的库并构造测试数据:

import pandas as pd
from datetime import timedelta

# 示例数据集
df = pd.DataFrame({
    'Hours': [1, 2, 0],
    'Mins': [30, 15, 45],
    'Secs': [45, 20, 10]
})

方式1:通过列名调用(可读性更高)

直接在lambda函数里通过行对象的列名取值,逻辑更清晰:

df['Duration'] = df[['Hours', 'Mins', 'Secs']].apply(
    lambda row: timedelta(hours=row['Hours'], minutes=row['Mins'], seconds=row['Secs']),
    axis=1
)

方式2:通过位置参数调用(更简洁)

如果想用你最初写的x,y,z参数形式,可以把行转成列表后解包:

df['Duration'] = df[['Hours', 'Mins', 'Secs']].apply(
    lambda row: timedelta(*row.tolist()),  # 解包行数据为三个参数
    axis=1
)

二、更高效的替代方案:矢量化操作

apply本质是逐行循环,数据量大时效率会偏低。Pandas提供了矢量化的pd.to_timedelta方法,速度更快:

df['Duration'] = pd.to_timedelta(df['Hours'], unit='h') + \
                 pd.to_timedelta(df['Mins'], unit='m') + \
                 pd.to_timedelta(df['Secs'], unit='s')

最终效果

运行代码后,你的DataFrame会生成目标列:

Hours  Mins  Secs        Duration
0      1    30    45 0 days 01:30:45
1      2    15    20 0 days 02:15:20
2      0    45    10 0 days 00:45:10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:09