Как сложить / вычесть массив различных месячных таймдельт в Пандах? - PullRequest
0 голосов
/ 20 октября 2018

Я хочу вычесть некоторое количество месяцев из столбца datetime.Каждая строка имеет разное количество месяцев для вычитания.Например,

df = pd.DataFrame({
    'timestamp': pd.date_range('2017-10-01', '2018-10-01', freq='m'),
    'delta_in_months': [1, 4, 2, 5, 1, 3, 1, 5, 2, 4, 1, 3]
})

Результат должен выглядеть следующим образом (округление дня не имеет значения, это может быть 01 или 28/29/30/31, его было легче ввести в 01),

    timestamp   delta_in_months  new_timestamp
0   2017-10-31  1                2017-09-01
1   2017-11-30  4                2017-07-01
2   2017-12-31  2                2017-10-01
3   2018-01-31  5                2017-08-01
4   2018-02-28  1                2018-01-01
5   2018-03-31  3                2017-12-01
6   2018-04-30  1                2018-03-01
7   2018-05-31  5                2017-12-01
8   2018-06-30  2                2018-04-01
9   2018-07-31  4                2018-03-01
10  2018-08-31  1                2018-07-01
11  2018-09-30  3                2018-06-01

Имейте в виду, что это будет для гораздо большего кадра данных.


Я пытался

months_delta = df.delta_in_months.apply(pd.tseries.offsets.MonthOffset)
df['new_timestamp'] = df.timestamp - months_delta

, но это дало очень неожиданные результаты, с каждой строкойзапись является DatetimeIndex.

1 Ответ

0 голосов
/ 20 октября 2018

вы можете попробовать

df['new_timestamp'] = df.timestamp - pd.to_timedelta(df.delta_in_months,unit='M')
df['new_timestamp'] = df['new_timestamp'].dt.date

Важно помнить, что 1 'M' = 30 'D' .

...