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

2024-10-03 09:07:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,共有5k个条目。它有1列date\u 1。我想创建一个新列isAuth,它的值可以是0和1。每个日期在数据集中可能有多个条目。我要计算数据集中的各个日期,并为特定日期的数据集分配70%1和30%0。例如:20-10-2019共有100个条目,其中70个条目的isAuth为1,30个条目的isAuth为0。有人能告诉我如何实现这一点吗


Tags: 数据目的date条目isauth
1条回答
网友
1楼 · 发布于 2024-10-03 09:07:41

因为你没有提供数据库,我用雷达模块创建了一个。看看这是不是你想做的:

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])

最后,使用explode展开每个列表

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

df

注:df.explode仅在0.25.0或更高版本中可用

相关问题 更多 >