pandas 如何合并年和月列并添加日期

eyh26e7m  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(245)

我有一个DataFrame,其中一列是月份,一列是年份:

A = [2, 3, 4]
B = [2013, 2014, 2015]
df = pd.DataFrame({
    'A': A,
    'B': B,
})

我想添加每个月的结束日期,并生成如下所示的新列:

A = [2, 3, 4]
B = [2013, 2014, 2015]
C = [2013-2-28, 2014-3-31, 2015-4-30]
df = pd.DataFrame({
    'A': A, 
    'B': B, 
    'assessDate': C,
})
pvabu6sv

pvabu6sv1#

您可以使用calendar.monthrange(year, month),它返回一个元组,其中第一个元素是该月的第一天,第二个元素是给定年份中该月的天数。
代码:

import calendar

A = [2, 3, 4, 6, 8, 9, 10, 11]
B = [2013, 2014, 2015, 2019, 2020, 2021, 2022, 2023]
C = [f"{year}-{month}-{calendar.monthrange(year, month)[1]}" for year, month in zip(B, A)]
df = pd.DataFrame({'A': A, 'B': B, 'assessDate': C})

输出:

A     B  assessDate
0   2  2013   2013-2-28
1   3  2014   2014-3-31
2   4  2015   2015-4-30
3   6  2019   2019-6-30
4   8  2020   2020-8-31
5   9  2021   2021-9-30
6  10  2022  2022-10-31
7  11  2023  2023-11-30
qyyhg6bp

qyyhg6bp2#

我的建议是使用pd.to_datetime()将它们转换为每月第一天的日期时间。
然后,Pandas允许您向该日期时间添加一个偏移量,表示月初和月末之间的差异。

df['assessDate'] = pd.to_datetime(dict(year=df['B'], month=df['A'], day=1)) + pd.offsets.MonthEnd(0)

相关问题