首页 > 解决方案 > python - 如何在python数据框中给定的日期添加灵活的年数?

问题描述

我有一个数据框

    sec    date     l1  l2 
0   abc 2001-03-27  12  31
1   abc 2001-03-29  13  32
2   abc 2001-04-03  14  33
3   abc 2001-05-04  15  34
4   abc 2001-07-05  16  35
5   abc 2001-07-06  17  36
6   abc 2001-08-07  18  37
7   abc 2001-09-08  19  38
8   abc 2001-10-09  20  39
9   abc 2001-11-10  21  40
10  abc 2001-12-11  22  41

我想编写一个需要 2 个参数的函数,比如 flexible_date_adder(data, no_of_years_to_add=[1,4])

期望:如果我通过我的数据框,我应该得到 2 个名为“date1yr”和“date4yr”的列,这将使我的日期增加 1 年和 4 年并给出结果

预期输出:

    sec    date     l1  l2  date1yr      date4yr   
0   abc  2001-03-27 12  31  2002-03-27  2005-03-27

对于所有数据框日期。
谢谢

标签: pythonpandasdataframe

解决方案


尝试:

df.date = pd.to_datetime(df.date)

def flexible_date_adder(data, no_of_years_to_add):
    add_year = {}
    for y in no_of_years_to_add:
         add_year[f"year{y}"] = (data.date+pd.DateOffset(years=y))
    return (add_year)

no_of_years_to_add=[1,4]
df = pd.concat([df,pd.DataFrame(df.apply(flexible_date_adder, no_of_years_to_add=[1,4], axis=1).tolist())],axis=1)

东风:

日期 l1 l2 第一年 第 4 年
0 美国广播公司 2001-03-27 12 31 2002-03-27 2005-03-27
1 美国广播公司 2001-03-29 13 32 2002-03-29 2005-03-29
2 美国广播公司 2001-04-03 14 33 2002-04-03 2005-04-03
3 美国广播公司 2001-05-04 15 34 2002-05-04 2005-05-04
4 美国广播公司 2001-07-05 16 35 2002-07-05 2005-07-05
5 美国广播公司 2001-07-06 17 36 2002-07-06 2005-07-06
6 美国广播公司 2001-08-07 18 37 2002-08-07 2005-08-07
7 美国广播公司 2001-09-08 19 38 2002-09-08 2005-09-08
8 美国广播公司 2001-10-09 20 39 2002-10-09 2005-10-09
9 美国广播公司 2001-11-10 21 40 2002-11-10 2005-11-10
10 美国广播公司 2001-12-11 22 41 2002-12-11 2005-12-11

推荐阅读