#python #pandas
#python #pandas
Вопрос:
Я хотел бы создать уникальные идентификаторы для значений, которые являются дубликатами. Значения, которые являются дубликатами, равны только 0. Идея состоит в том, чтобы преобразовать каждый ноль в ноль плюс его позицию (0 1 для первой строки, 0 2 для второй строки и т.д.). Однако проблема в том, что столбец также имеет другие не повторяющиеся значения.
Я написал эту строку кода, чтобы попытаться преобразовать нулевые значения, как указано, но я получаю это сообщение об ошибке
Ошибка типа: ufunc ‘add’ не содержал цикла с сигнатурами, соответствующими типам dtype(‘
Вот мой код
seller_customer['customer_id'] = np.where(seller_customer['customer_id']==0, seller_customer['customer_id'] seller_customer.groupby(['customer_id']).cumcount().replace('0',''))
Вот пример моих данных
{0: '7e468d618e16c6e1373fb2c4a522c969',
1: '1c14a115bead8a332738c5d7675cca8c',
2: '434dee65d973593dbb8461ba38202798',
3: '4bbeac9d9a22f0628ba712b90862df28',
4: '578d5098cbbe40771e1229fea98ccafd',
5: 0,
6: 0,
7: 0}
Комментарии:
1. Интересно. Возможно, вам нужно написать функцию Python
Ответ №1:
Если я правильно понимаю, вы можете просто присвоить значения диапазона тем id
, которые 0
:
df.loc[df['id']==0, 'id'] = np.arange((df['id']==0).sum()) 1
print(df)
Вывод:
id
0 7e468d618e16c6e1373fb2c4a522c969
1 1c14a115bead8a332738c5d7675cca8c
2 434dee65d973593dbb8461ba38202798
3 4bbeac9d9a22f0628ba712b90862df28
4 578d5098cbbe40771e1229fea98ccafd
5 1
6 2
7 3
Или более короткий, но немного медленный:
df.loc[df['id']==0, 'id'] = (df['id']==0).cumsum()
Ответ №2:
Вы можете сделать что-то вроде этого:
from pandas.util import hash_pandas_object
import numpy as np
df.x = np.where(df.x == 0, hash_pandas_object(df.x), df.x)
df
Вывод:
x
0 7e468d618e16c6e1373fb2c4a522c969
1 1c14a115bead8a332738c5d7675cca8c
2 434dee65d973593dbb8461ba38202798
3 4bbeac9d9a22f0628ba712b90862df28
4 578d5098cbbe40771e1229fea98ccafd
5 593769213749726025
6 14559158595676751865
7 4575103004772269825
Они не будут последовательными, как индекс, но они будут уникальными (почти наверняка, если вы не столкнетесь с коллизией хэшей)