Создать столбец панд pd.date_range - PullRequest
       1

Создать столбец панд pd.date_range

0 голосов
/ 25 сентября 2018

У меня есть такие данные:

import datetime as dt
import pandas as pd
df = pd.DataFrame({'date':[dt.datetime(2018,8,25), dt.datetime(2018,7,21)],
                   'n':[10,7]})

Я хотел бы создать третий столбец, который содержит диапазон дат, созданный pd.date_range, используя «date» в качестве даты начала и «n» в качествеколичество периодов.Поэтому первая запись должна быть:

pd.date_range(dt.datetime(2018,8,25), periods=10, freq='d')

(у меня есть список «целевых» дат, и моя цель - проверить, содержит ли date_range какую-либо из этих целевых дат).

Я попытался это:

df['date_range'] = df.apply(lambda x: pd.date_range(x['date'],
                                                     x['n'],
                                                     freq='d'))

Но это дает KeyError: ('date', 'произошло на дату индекса')

Любая идея о том, как сделать это без использования цикла for,или вообще есть лучшее решение?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я нашел решение, которое работает (но я уверен, что есть более хороший способ ...)

# define target
tgt = [dt.datetime(2018,8,26)]

# find max n
max_n = max(df['n'])

# create that many columns and increment the day
for i in range(max_n):
    df['date_{}'.format(i)] = df['date'] + dt.timedelta(days=i)

new_cols = ['date_{}'.format(n) for n in range(max_n)]

# check each one and replace with a 1 if it matches the "tgt"
df['target_date'] = 0
for col in new_cols:
    df['target_date'] = np.where(df[col].isin(tgt),
                          1,
                          df['target_date'])

# drop intermediate cols
df = df[[i for i in df.columns if not i in new_cols]]
0 голосов
/ 25 сентября 2018

Вы должны добавить axis=1 в apply

df['date_range'] = df.apply(lambda x: pd.date_range(x['date'], x['n'], freq='d'), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...