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