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

如何使用apply方法合并pandas DataFrame中的多列?

解决Pandas中用Apply/Lambda生成拼接日期列的问题

嘿,我来帮你搞定这个apply方法的问题~你的代码有几个小细节出错导致失败,我来拆解一下,再给你几种可行的解决方案:

原代码的问题分析

  1. 索引方式错误:df[:,["DAY_OF_MONTH","MONTH","AYEAR"]]不是Pandas中选取多列的正确写法,应该直接用df[["DAY_OF_MONTH","MONTH","AYEAR"]]。
  2. 未指定行处理轴:apply默认是按列(axis=0)处理数据,但你需要逐行拼接三个列的值,必须指定axis=1来按行传递整行数据。
  3. 赋值对象错误:df.loc["Test_FL_DATE"]是尝试给行赋值,但你想要的是新增一列,应该用列名直接索引(比如df["Test_FL_DATE"])。

修正后的解决方案

方案1:修改自定义函数的Apply调用

调整函数参数为接收整行数据,同时指定axis=1:

def date_creation(row):
    # 从行中提取三个日期字段并拼接
    return f"{row['DAY_OF_MONTH']}/{row['MONTH']}/{row['AYEAR']}"

# 新增Test_FL_DATE列
df["Test_FL_DATE"] = df[["DAY_OF_MONTH", "MONTH", "AYEAR"]].apply(date_creation, axis=1)

方案2:用Lambda函数简化写法

如果不想单独定义函数,直接用lambda更简洁:

df["Test_FL_DATE"] = df.apply(
    lambda row: f"{row['DAY_OF_MONTH']}/{row['MONTH']}/{row['AYEAR']}",
    axis=1
)

方案3:矢量化操作(推荐,效率更高)

Apply本质还是循环,对于大数据集,用Pandas的矢量化字符串拼接效率更高:

# 先把数值列转为字符串,再直接拼接
df["Test_FL_DATE"] = (
    df["DAY_OF_MONTH"].astype(str) + '/' +
    df["MONTH"].astype(str) + '/' +
    df["AYEAR"].astype(str)
)

这几种方法都能实现你想要的效果,其中矢量化操作是最优选择,因为它利用了Pandas的底层优化,比apply快很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:58