Доступ к различным столбцам из DataFrame в преобразовании - PullRequest
1 голос
/ 24 мая 2019

Я хочу написать функцию преобразования, обращающуюся к двум столбцам из 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  

Я бы хотел увеличить год в столбце date на количество лет с учетом переменной приращения. Предлагаемый код (который не работает):

df.transform(lambda df: date(df.date.year + df.increment, 1, 1))

Есть ли способ получить доступ к отдельным столбцам в функции (здесь лямбда-функция), переданным в transform()?

1 Ответ

2 голосов
/ 24 мая 2019

Вы можете использовать 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')

[out]

                 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})

[out]

        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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...