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

如何用Pandas简洁合并年、月列生成日期列?

一行Pythonic代码实现Pandas生成日期列

刚好遇到过类似的需求!你原来用循环的方法虽然能实现,但确实不够简洁,这里给你两个更Pythonic的一行写法,而且性能也更优:

方案一:使用Pandas矢量化方法(推荐)

这是效率最高的写法,因为Pandas的pd.to_datetime支持直接解析多列组合的日期,完全不需要循环:

import pandas as pd
from datetime import date

# 初始化你的DataFrame
ID = ['A', 'B', 'C', 'D', 'E', 'F']
YEAR = [2017, 2017, 2017, 2017, 2017, 2017]
MONTH = [1, 2, 3, 4, 5, 6]
df = pd.DataFrame({'ID': ID, 'YEAR': YEAR, 'MONTH': MONTH})

# 一行生成DATE列
df['DATE'] = pd.to_datetime(df[['YEAR', 'MONTH']].assign(DAY=1))

这里用assign(DAY=1)临时添加一个值为1的日列,pd.to_datetime会自动把这三列组合成标准的日期格式。

方案二:使用apply结合datetime.date

如果你更倾向于用datetime.date构造函数,也可以用apply一行搞定:

df['DATE'] = df.apply(lambda row: date(row['YEAR'], row['MONTH'], 1), axis=1)

axis=1表示按行遍历,每一行的YEAR和MONTH会被传入date函数生成日期对象。

最终效果

两种方法都能得到你想要的目标DataFrame:
+----+------+-------+------------+
| ID | YEAR | MONTH | DATE |
+----+------+-------+------------+
| A | 2017 | 1 | 2017-01-01 |
| B | 2017 | 2 | 2017-02-01 |
| C | 2017 | 3 | 2017-03-01 |
| D | 2017 | 4 | 2017-04-01 |
| E | 2017 | 5 | 2017-05-01 |
| F | 2017 | 6 | 2017-06-01 |
+----+------+-------+------------+

小提示:如果你的数据量很大,优先选方案一,因为矢量化操作比apply(本质是逐行循环)的执行速度快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:23