Присвоить номер другому Датафрейму - Серии ([], Имя: id, dtype: float64) - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть две панды Dataframes, первая с именем source, в которой у нас есть ID и имена (ID, имя пользователя) source.head()

enter image description here

Второй называется data_code, в котором у нас также есть столбец unsernames (0) и столбец кода, в котором я постараюсь получить идентификаторы.

data_code.head()

enter image description here

То, что я сделал, - это создание функции, которая будет искать одинаковые имена пользователей в двух Dataframes и получать идентификатор имени пользователя из источникаКадр данных, если он не существует, генерирует случайный идентификатор.В своем решении я попытался создать словарь, в котором у меня будут только уникальные значения.

uniqueIDs = data_code[0].unique()
FofToID= {}

Затем я заполню словарь Id, используя эту функцию

for i in range(len(uniqueIDs)):   
  if uniqueIDs[i] in list(source["username"]): 
    FofToID[uniqueIDs[i]]= np.float_(source[source["username"]==i]["id"])  
  else:
    FofToID[uniqueIDs[i]]= int(random.random()*10000000)

, вывод былкак показано ниже: enter image description here Моя проблема в том, что все значения, существующие в кадре данных source, получают значение Series ([], Name: id, dtype: float64).Я пытался решить эту проблему, но мне не удалось.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я хотел бы поблагодарить @jezrael за его вклад, вот окончательное решение, которое я получил:

for i in range(len(uniqueIDs)):<br> if uniqueIDs[i] in list(source["username"]): FofToID[uniqueIDs[i]]= int(source[source["username"]==uniqueIDs[i]]["id"])<br> else: FofToID[uniqueIDs[i]]= int(random.random()*10000000)

вывод выглядит так

enter image description here

0 голосов
/ 22 февраля 2019

Используйте merge с левым соединением, для несуществующих значений id используйте fillna и последнее создание Series с помощью set_indexс to_dict:

source = pd.DataFrame({'id':[111111,222222,666666,888888], 'username':['aa','ss','dd','ff']})
data_code = pd.DataFrame({'code':[0]*4, 0:['ss','dd','rr','yy']})


FofToID = (data_code.merge(source, left_on=0, right_on='username', how='left')
               .fillna({'id': int(random.random()*10000000)})
               .set_index(0)['id']
               .to_dict()
                )
print (FofToID)
{'ss': 222222.0, 'dd': 666666.0, 'rr': 367044.0, 'yy': 367044.0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...