Python random.shuffle не дает точных уникальных значений фрейму данных - PullRequest
0 голосов
/ 29 ноября 2018

Я делаю фиктивный набор данных со списком компаний в виде user_id, задания, публикуемые каждой компанией в виде job_id и c_id в качестве идентификатора кандидата.Я уже выполнил первые два шага, и мой набор данных выглядит следующим образом.

user_id         job_id
0   HP          HP2
1   Microsoft   Microsoft4
2   Accenture   Accenture2
3   HP          HP0
4   Dell        Dell4
5   FIS         FIS1
6   HP          HP0
7   Microsoft   Microsoft4
8   Dell        Dell2
9   Accenture   Accenture0

Также они перетасованы.Теперь я хочу добавить случайный идентификатор кандидата в этот набор данных таким образом, чтобы c_id не повторялся для конкретного job_id.

Мой подход к этому заключается в следующем.joblist - это список всех job_ids.

for i in range(50):
    l = list(range(0,len(df[df['job_id'] == joblist[i]])))
    random.shuffle(l)
    df['c_id'][df['job_id'] == joblist[i]] = l

, после чего я протестировал его как

len (df ['c_id'] [df ['job_id '] == joblist [0]])

output = 168

df [' c_id '] [df [' job_id '] == список вакансий [0]]. nunique ()

output = 101

и то же самое происходит со всеми значениями.Я перепроверил уникальность l после каждого шага и его 168 уникальных значений.Что я здесь не так делаю?

1 Ответ

0 голосов
/ 29 ноября 2018

Уникальные идентификаторы предоставляются базовыми pd функциями, поэтому вам не нужно ничего необычного.Решения различаются по эффективности в зависимости от размера вашего df.

# Hashing for small datasets:
df['new_id'] = pd.factorize(df.apply(tuple, axis=1))[0] + 1

# Grouping for larger datasets:
df['new_id'] = df.groupby(df.columns.tolist(), sort=False).ngroup() + 1

# Assign:
df.assign(id=(#Some combo of columns).astype('category').cat.codes)

Дополнительная информация: Q: [Pandas] Как эффективно назначать уникальный идентификатор лицам с несколькими записями на основе имени в оченьlarge df

Как назначить уникальный идентификатор для обнаружения повторяющихся строк в кадре данных pandas?

...