Python pandas 将年份整数列添加到日期列

Python pandas add a years integer column to a date column

我有一个问题与这里讨论的有点相似 但是在我的例子中,添加到日期列的年数存储在另一列中。这是我的无效代码:

import datetime
import pandas as pd
df1 = pd.DataFrame( [ ["Tom",5], ['Jane',3],['Peter',1]],  columns = ["Name","Years"])
df1['Date'] = datetime.date.today()
df1['Final_Date'] = df1['Date'] + pd.offsets.DateOffset(years=df1['Years'])

目标是将第 1 行的当前日期增加 5 年,将第 2 行的当前日期增加 3 年,等等。 有什么建议么?谢谢

import datetime
import pandas as pd
df1 = pd.DataFrame( [ ["Tom",5], ['Jane',3],['Peter',1]],  columns = ["Name","Years"])
df1['Date'] = datetime.date.today()
df1['Final_date'] = datetime.date.today()

df1['Final_date'] = df1.apply(lambda g: g['Date'] + pd.offsets.DateOffset(years = g['Years']), axis=1)


print(df1)

试试这个,您在调用 pd.offsets.DateOffset(years=df1['Years']) 时试图添加整列,而不是仅在列中添加 1 个值。

编辑:由于 iterrows 的性能不佳,我从 iterrows 更改为矢量化方法

假设 Years 中不同值的数量是有限的,你可以尝试 groupby 并用 pd.DateOffset 进行操作,例如:

df1['new_date'] = (
    df1.groupby('Years')
       ['Date'].apply(lambda x: x + pd.DateOffset(years=x.name))
)
print(df1)
    Name  Years        Date   new_date
0    Tom      5  2021-07-13 2026-07-13
1   Jane      3  2021-07-13 2024-07-13
2  Peter      1  2021-07-13 2022-07-13

否则您可以提取年、月和日,将 Years 列添加到 year 并重新创建 datetime 列

df1['Date'] = pd.to_datetime(df1['Date'])
df1['new_date'] = (
    df1.assign(year=lambda x: x['Date'].dt.year+x['Years'], 
               month=lambda x: x['Date'].dt.month,
               day=lambda x: x['Date'].dt.day, 
               new_date=lambda x: pd.to_datetime(x[['year','month','day']]))
       ['new_date']
)

同样的结果

通过将年转换为天,然后添加到转换后的日期时间列来转换为时间增量:

df1['Final_Date'] = pd.to_datetime(df1['Date']) \
    + pd.to_timedelta(df1['Years'] * 365, unit='D')

使用 to_timedeltaunit='Y' 多年是 deprecated 并抛出 ValueError