Создать несколько столбцов на основе даты - PullRequest
0 голосов
/ 04 января 2019

Я недавно начал работать с пандами, и во время тестирования с «датой» я нашел эту проблему.С учетом этого кадра данных:

df = pd.DataFrame({'id': [123, 431, 652, 763, 234], 'time': ['8/1/2017', '6/1/2015', '7/1/2016', '9/1/2014', '12/1/2018']})

Создайте новый кадр данных со столбцами задних дат, выглядя так:

    id        time       time1       time2       time3       time4      time5
0   123 2017-08-01  2017-07-01  2017-06-01  2017-05-01  2017-04-01  2017-03-01
1   431 2015-06-01  2015-05-01  2015-04-01  2015-03-01  2015-02-01  2015-01-01
2   652 2016-07-01  2016-06-01  2016-05-01  2016-04-01  2016-03-01  2016-02-01
3   763 2014-09-01  2014-08-01  2014-07-01  2014-06-01  2014-05-01  2014-04-01
4   234 2018-12-01  2018-11-01  2018-10-01  2018-09-01  2018-08-01  2018-07-01

Я пытаюсь с этими кодами:

df['time'] = pd.to_datetime(df['time'], errors='coerce') #Object to Date 
df['time1'] = df['time'] - pd.DateOffset(months=1)
df['time2'] = df['time'] - pd.DateOffset(months=2)
df['time3'] = df['time'] - pd.DateOffset(months=3)
df['time4'] = df['time'] - pd.DateOffset(months=4)
df['time5'] = df['time'] - pd.DateOffset(months=5)

Есть ли способ решить эту проблему быстрее и эффективнее?Я уже протестировал несколько методов для создания задних дат.Однако я не знаю, как это сделать с несколькими столбцами.Потому что, если для данных требуется задняя дата 24 месяца, мне придется много копировать и вставлять (вручную).

1 Ответ

0 голосов
/ 04 января 2019

Вот один из способов использования date_range с concat

s=df.time.apply(lambda x : pd.date_range(end=x,periods =6,freq='MS')[::-1].tolist())
df=pd.concat([df,pd.DataFrame(s.tolist(),index=df.index).add_prefix('Time').iloc[:,1:]],axis=1)
df
    id       time      Time1      Time2      Time3      Time4      Time5
0  123 2017-08-01 2017-07-01 2017-06-01 2017-05-01 2017-04-01 2017-03-01
1  431 2015-06-01 2015-05-01 2015-04-01 2015-03-01 2015-02-01 2015-01-01
2  652 2016-07-01 2016-06-01 2016-05-01 2016-04-01 2016-03-01 2016-02-01
3  763 2014-09-01 2014-08-01 2014-07-01 2014-06-01 2014-05-01 2014-04-01
4  234 2018-12-01 2018-11-01 2018-10-01 2018-09-01 2018-08-01 2018-07-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...