30 дневное расстояние между датами в столбце datetime64 [ns] - PullRequest
0 голосов
/ 12 марта 2019

У меня есть данные следующей формы:

6460  2001-07-24 00:00:00    67.5      75.1   75.9   71.0   75.2    81.8
6490  2001-06-24 00:00:00    68.4      74.9   76.1   70.9   75.5    82.7
6520  2001-05-25 00:00:00    69.6      74.7   76.3   70.8   75.5    83.2
6550  2001-04-25 00:00:00    69.2      74.6   76.1   70.6   75.0    83.1
6580  2001-03-26 00:00:00    69.1      74.4   75.9   70.5   74.3    82.8
6610  2001-02-24 00:00:00    69.0      74.0   75.3   69.8   73.8    81.9
6640  2001-01-25 00:00:00    68.9      73.9   74.6   69.7   73.5    80.0
6670  2000-12-26 00:00:00    69.0      73.5   75.0   69.5   72.6    81.8
6700  2000-11-26 00:00:00    69.8      73.2   75.1   69.5   72.0    82.7
6730  2000-10-27 00:00:00    70.3      73.1   75.0   69.4   71.3    82.6
6760  2000-09-27 00:00:00    69.4      73.0   74.8   69.4   71.0    82.3
6790  2000-08-28 00:00:00    69.6      72.8   74.6   69.2   70.7    81.9
6820  2000-07-29 00:00:00    67.8      72.9   74.4   69.1   70.6    81.8

Я хочу, чтобы все даты имели разницу в 30 дней между собой.Я знаю, как добавить конкретный день или месяц к объекту datetime с чем-то вроде

ndfd = ndf['Date'].astype('datetime64[ns]')
ndfd = ndfd.apply(lambda dt: dt.replace(day=15))

Но это не учитывает разницу в днях от месяца к месяцу.

Как я могу гарантировать, что в моих данных есть последовательный шаг в днях от месяца к месяцу, если я могу изменить день, пока он остается в том же месяце?

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

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

df['date'] = pd.date_range(start=df['date'][0], periods=len(df), freq='30D')
1 голос
/ 12 марта 2019

IIUC вы можете изменить столбец даты следующим образом:

import datetime

a = df.iloc[0,0]  # first date, assuming date col is first 
df['date'] = [a + datetime.timedelta(days=30 * i) for i in range(len(df))]
0 голосов
/ 12 марта 2019

Я не проверял это, поэтому не уверен, что он будет работать так гладко, как я думал, что будет =).

Вы можете преобразовать свой первый день в порядковый, добавить к нему 30 * i и затем преобразовать его обратно.

first_day=df.iloc[0]['date_column'].toordinal()
df['date']=(first_day+30*i for i in range(len(df))).fromordinal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...