Добавить месяцы во фрейм данных, используя столбец периода - PullRequest
0 голосов
/ 19 июня 2019

Я хочу добавить столбец даты% Y% m% d к моему фрейму данных, используя столбец периода с целыми числами 1–32, которые представляют месячные точки данных, начиная с определенной переменной среды «odate» (например, если odate= 20190531, тогда период 1 должен быть 20190531, период 2 должен быть 20190630 и т. Д.)

Я попытался определить словарь с количеством периодов в столбце в качестве ключей и значением odate + MonthEnd (period -1)

Это отлично работает и хорошо;тем не менее, я хочу улучшить код, чтобы он был гибким, учитывая изменения в количестве периодов.

Существует ли функция, которая позволит мне заполнять столбцы даты одатой в периоде 1, а затем последующий месяц заканчивается дляпоследующие периоды?

пример набора данных:

odate = 20190531

period value
1      5.5
2      5
4      6.2
3      5
5      40
11     5

требуемый набор данных:

odate = 20190531

period value date
1      5.5   2019-05-31
2      5     2019-06-30
4      6.2   2019-08-31
3      5     2019-07-31
5      40    2019-09-30
11     5     2020-03-31

1 Ответ

2 голосов
/ 19 июня 2019

Вы можете использовать pd.date_range():

pd.date_range(start = '2019-05-31', periods = 100,freq='M')

Вы можете изменить общее количество периодов в зависимости от того, что вам нужно, freq='M' означает частоту окончания месяца

Здесь - это список смещенных псевдонимов, которые вы можете задать для параметра freq.

Если вы просто хотите добавить или вычесть некоторый период к дате, вы можете использовать pd.DataOffset:

odate = pd.Timestamp('20191031')
odate
>> Timestamp('2019-10-31 00:00:00')

odate - pd.DateOffset(months=4)
>> Timestamp('2019-06-30 00:00:00')

odate + pd.DateOffset(months=4)
>> Timestamp('2020-02-29 00:00:00')

Чтобы добавить указанный столбец периода к концу месяца:

odate = pd.Timestamp('20190531')
df['date'] = df.period.apply(lambda x: odate + pd.offsets.MonthEnd(x-1))
df
 period value   date
0   1   5.5     2019-05-31
1   2   5.0     2019-06-30
2   4   6.2     2019-08-31
3   3   5.0     2019-07-31
4   5   40.0    2019-09-30
5   11  5.0     2020-03-31

Для повышения производительности используйте list-comprehension:

df['date'] = [odate + pd.offsets.MonthEnd(period-1) for period in df.period]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...