Случайно разделить набор данных по определенному ключу - PullRequest
0 голосов
/ 20 октября 2019

У меня есть датафрейм, в котором всего 5 тыс. Записей. Имеет 1 столбец date_1. Я хочу создать новый столбец isAuth, который может принимать значения 0 и 1. Каждая дата может иметь несколько записей в наборе данных. Я хочу подсчитать отдельные даты в наборе данных и назначить 70% 1 и 30% 0 для набора данных на определенную дату. Например: 20-10-2019 имеет в общей сложности 100 записей, тогда 70 из них имеют isAuth как 1, а 30 из них имеют isAuth как 0. Может кто-нибудь сказать мне, как этого добиться.

1 Ответ

0 голосов
/ 21 октября 2019

Поскольку вы не сделали базу данных доступной, я создал ее с помощью модуля радара. Посмотрите, хотите ли вы сделать следующее:

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

PS: df.explode доступен только в пандах 0.25.0 или выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...