如何使用apply方法合并pandas DataFrame中的多列?
解决Pandas中用Apply/Lambda生成拼接日期列的问题
嘿,我来帮你搞定这个apply方法的问题~你的代码有几个小细节出错导致失败,我来拆解一下,再给你几种可行的解决方案:
原代码的问题分析
- 索引方式错误:
df[:,["DAY_OF_MONTH","MONTH","AYEAR"]]不是Pandas中选取多列的正确写法,应该直接用df[["DAY_OF_MONTH","MONTH","AYEAR"]]。 - 未指定行处理轴:
apply默认是按列(axis=0)处理数据,但你需要逐行拼接三个列的值,必须指定axis=1来按行传递整行数据。 - 赋值对象错误:
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
相关产品推荐
相关产品推荐

