在特定键上随机划分数据集

时间:2019-10-20 20:34:32

标签: python pandas numpy

我有一个数据框,总共有5k个条目。它有1列date_1。我想创建一个新列isAuth,其值可以为0和1。每个日期在数据集中可能有多个条目。我想计算数据集中的各个日期,并为特定日期为数据集分配70%1和30%0。例如:20-10-2019总共有100个条目,然后其中70个具有isAuth为1,其中30个具有isAuth为0。有人可以告诉我如何实现该目标。

1 个答案:

答案 0 :(得分:0)

由于您没有使数据库可用,因此我使用了雷达模块创建了一个数据库。看看这是否是您想要做的:

import pandas as pd
import datetime
import radar 

创建具有重复日期的数据框

inicio = datetime.date(year =2000, month =1, day =1)

fim = datetime.date(year =2001, month =1, day =1)

lista_dates = [radar.random_date(start =inicio, stop =fim) for i in 
range(5000)]

df = pd.DataFrame({'date':lista_dates})

然后计算每个日期的重复次数:

df['count_dates'] = df.groupby('date')["date"].transform('count')

分别为1和0创建变量:

df['perc_1'] = round(0.7*df['count_dates'])

df['perc_0'] = round(0.3*df['count_dates'])

丢弃重复项,现在您知道重复的次数

df.drop_duplicates(subset = 'date', inplace = True)

df.reset_index(inplace = True)

df = df.astype('object')

创建变量“ isAuth”。请注意,每个单元格都有一个列表作为值

df['isAuth'] = 'a'
for i in range(len(df)):
    df['isAuth'][i] = list([1])*int(df['perc_1'][i])+list([0])*int(df['perc_0'][i])

最后,只需使用爆炸展开每个列表

df = df.explode('isAuth').reset_index(drop = True)

df

PS:df.explode仅在0.25.0或更高版本的熊猫中可用