我想编写一个转换函数,该函数访问DataFrame中的两列并将其传递给transform()
。
这是我要修改的DataFrame:
print(df)
date increment
0 2012-06-01 0
1 2003-04-08 1
2 2009-04-22 3
3 2018-05-24 6
4 2006-09-25 2
5 2012-11-02 4
我想将列日期中的年份增加给定变量增量的年份。提议的代码(无效)是:
df.transform(lambda df: date(df.date.year + df.increment, 1, 1))
是否可以访问传递给transform()
的函数(此处为lambda函数)中的各个列?
答案 0 :(得分:2)
您可以使用pandas.to_timedelta
:
# If necessary convert to date type first
# df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'] + pd.to_timedelta(df['increment'], unit='Y')
[出]
date increment
0 2012-06-01 00:00:00 0
1 2004-04-07 05:49:12 1
2 2012-04-21 17:27:36 3
3 2024-05-23 10:55:12 6
4 2008-09-24 11:38:24 2
5 2016-11-01 23:16:48 4
或者:
df['date'] = pd.to_datetime({'year': df.date.dt.year.add(df.increment),
'month': df.date.dt.month,
'day': df.date.dt.day})
[出]
date increment
0 2012-06-01 0
1 2004-04-08 1
2 2012-04-22 3
3 2024-05-24 6
4 2008-09-25 2
5 2016-11-02 4
您也可以通过使用apply
方法并传递axis=1
参数来解决您自己的解决方案:
from datetime import date
df.apply(lambda df: date(df.date.year + df.increment, 1, 1), axis=1)