Как сопоставить строку с числовым идентификатором в каждом столбце dataframe python3 - PullRequest
1 голос
/ 20 октября 2019

У меня есть фрейм данных:

import pandas as pd
d = {'user': ['bob','alice','bob'], 'item': 
['apple','coconut','pear']}
df = pd.DataFrame(data=d)




    user    item
0   bob     apple 
1   alice   coconut 
2   bob     pear

Моя цель - сопоставить каждую строку в каждом столбце с возрастающим идентификатором (начиная с 0) как

    user    item
0   0       0
1   1       1
2   0       2

Например, длястолбец user, [bob, alice] отобразится на [0,1]. Цель состоит в том, чтобы сохранить память для фрейма данных.

Кроме того, возможно ли указать столбец для сопоставления? Например, только сопоставление столбца user. Спасибо

Ответы [ 3 ]

4 голосов
/ 20 октября 2019

Вы можете использовать комбинацию .groupby() и .ngroup(), чтобы заменить имена в каждом столбце уникальным номером.

df['user'] = df.groupby(['user']).ngroup()
df['item'] = df.groupby(['item']).ngroup()
1 голос
/ 20 октября 2019

Сначала вы должны построить карту от пользователей до целых чисел, а затем выполнить подстановку с помощью встроенной Pandas pandas.Series.map :

import pandas as pd

d = {'user': ['bob','alice','bob'],
     'item': ['apple','coconut','pear']}
df = pd.DataFrame(data = d)

unique_users = df.user.unique()
user_map = {u: i for i, u in enumerate(unique_users)}
df.user = df.user.map(user_map)
1 голос
/ 20 октября 2019

Вы можете попробовать это:

import pandas as pd
d = {'user': ['bob','alice','bob'], 'item': 
['apple','coconut','pear']}
df = pd.DataFrame(data=d)
col_user = df['user'].unique()
col_item = df['item'].unique()
d_user = pd.Series(range(len(col_user)), index = col_user).to_dict()
d_item = pd.Series(range(len(col_item)), index = col_item).to_dict()
df = df.replace({'user': d_user, 'item': d_item}) 
df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...