Случайная дата на основе определенного диапазона в пандах - PullRequest
0 голосов
/ 27 октября 2018

Мой файл main_csv.csv выглядит как

Client_ID     Frequency
123AASD45         10
2345OPU78         9
763LKJ90          2

Здесь моя частота - это число дат, например, если частота 10, что клиент должен встречаться 10 раз в течение моих рабочих дней в первом квартале (январь 2018 г. - март 2018 г.) мой желаемый результат должен быть как

Client_ID    Dates_Reached
123AASD45      01/05/2018 /* random dates */
123AASD45      01/08/2018
 ...............

Должен ли я использовать цикл или любой другой лучший способ сделать это? Я пробовал как ниже

df=read_csv('main_csv.csv',delimiter='|')

for rows in df:
    i=0
    #generate random date
    i=i+1
    if (i==df['Frequency']):
       break

1 Ответ

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

Сначала вы определяете функцию date_range, которая берет дату начала и даты окончания, а также размер выборки и возвращает выборку.

import pandas as pd
df = pd.DataFrame({'client':['123AASD45', '2345OPU78', '763LKJ90'], 'frequency':[10,9,2]})

def date_range(n, start='1/1/2011', end='4/1/2011'):
    date_range = pd.date_range(start, end)
    return list(pd.Series(date_range).sample(n))

Затем для каждого клиента вы назначаете выборку дат и делаете некоторыеданные преобразуются в так, чтобы вы могли присоединиться к исходной таблице.

df['dates'] = df['frequency'].apply(lambda x: date_range(x))
df_dates = df['dates'].apply(pd.Series).reset_index()
df_dates = df_dates.melt(id_vars='index').dropna().drop(['variable'], axis=1).set_index('index')

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

df.join(df_dates)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...