python - 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
对于所有数据框日期。
谢谢
解决方案
尝试:
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 |
推荐阅读
- esper - 如何在时间间隔内事件数量超过阈值时立即触发esper
- regex - 如何仅将字母数字与正则表达式匹配
- c# - SignalR Core如何每n秒向客户端发送消息
- maven - 当我使用 maven 编译 hadoop3.0.0beta1 时出现错误“连接被拒绝”
- c# - 将字典导出为 JSON,按键排序
- oauth-2.0 - 如何使 OAuth 2.0 插件在 Kong 上工作
- swift - Swift 4.2 & 观察枚举值
- javascript - 控件和循环不适用于 Youtube 视频(YouTube API)
- javascript - feathersjs 频道的事件不会传递给客户端
- javascript - 用于多语言页面上的 onclick 元素的缓存