Сначала вы определяете функцию 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)