如何合并DataFrame的年月列并生成对应月末日期列?
如何给包含月份和年份的DataFrame添加月末日期列?
你可以通过Pandas的日期处理工具快速生成月末日期,以下是两种简洁的实现方式:
方法一:使用MonthEnd偏移量
这种方法直接将年份和月份拼接为日期字符串,转换为datetime后加上月末偏移量,自动处理闰年等特殊情况:
import pandas as pd from pandas.tseries.offsets import MonthEnd # 初始化原始DataFrame A = [2, 3, 4] B = [2013, 2014, 2015] df = pd.DataFrame({ 'A': A, 'B': B, }) # 生成月末日期列 df['assessDate'] = pd.to_datetime(df['B'].astype(str) + '-' + df['A'].astype(str)) + MonthEnd(0) # 若需要将日期转为字符串格式(如"2013-02-28"),可添加: # df['assessDate'] = df['assessDate'].dt.strftime('%Y-%m-%d')
方法二:利用当月天数计算
通过构造当月第一天的日期,再根据当月总天数推算月末:
import pandas as pd # 初始化原始DataFrame A = [2, 3, 4] B = [2013, 2014, 2015] df = pd.DataFrame({ 'A': A, 'B': B, }) # 构造当月第一天的日期 df['first_day'] = pd.to_datetime({'year': df['B'], 'month': df['A'], 'day': 1}) # 计算月末日期 df['assessDate'] = df['first_day'] + pd.DateOffset(days=df['first_day'].dt.days_in_month - 1) # 可删除临时列first_day # df.drop('first_day', axis=1, inplace=True)
运行后,df会新增assessDate列,对应每个月份的最后一天,结果如下:
| A | B | assessDate |
|---|---|---|
| 2 | 2013 | 2013-02-28 |
| 3 | 2014 | 2014-03-31 |
| 4 | 2015 | 2015-04-30 |
内容的提问来源于stack exchange,提问作者Rinne Tsujikubo
相关产品推荐
相关产品推荐

