Python 熊猫中基于一定范围的随机日期

Python 熊猫中基于一定范围的随机日期,python,pandas,date,Python,Pandas,Date,我的主_csv.csv文件如下所示 Client_ID Frequency 123AASD45 10 2345OPU78 9 763LKJ90 2 此处,我的频率是指在我的第一季度工作日(2018年1月至2018年3月)内,必须满足客户10次的日期数,如频率为10 我想要的输出应该是 Client_ID Dates_Reached 123AASD45 01/05/2018 /* random dates */ 123AA

我的主_csv.csv文件如下所示

Client_ID     Frequency
123AASD45         10
2345OPU78         9
763LKJ90          2
此处,我的频率是指在我的第一季度工作日(2018年1月至2018年3月)内,必须满足客户10次的日期数,如频率为10 我想要的输出应该是

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

首先定义一个函数date_范围,该范围接受开始日期和结束日期以及样本大小,并返回一个样本

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)

所有这一切的随机性到底是什么?当我加入时,我得到的数据可能重复0001ABASD['2018-09-07','2018-03-05',但我希望在客户ID和日期行中。怎么做?字段“value”包含日期,您可以删除日期字段