在转换中从DataFrame访问不同的列

时间:2019-05-24 14:16:26

标签: python pandas transformation

我想编写一个转换函数,该函数访问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函数)中的各个列?

1 个答案:

答案 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)