Как сопоставить другой pandas DataFrame другому с Python - PullRequest
0 голосов
/ 22 марта 2020

У меня есть два Pandas DataFrame. У меня есть один фрейм данных, содержащий 3 столбца интересов, который содержит идентификаторы клиентов для различных продуктов. У меня есть второй фрейм данных, содержащий имена клиентов. Я хотел бы расширить первый фрейм данных, чтобы новые столбцы содержали имена клиентов в виде отдельных столбцов. Например, я хотел бы расширить основной фрейм данных, сопоставленный со вторым фреймом данных, но с новыми столбцами, такими как customer_1_name, customer_2_name, customer_3_name

Помня о том, что один клиент может иметь разные пакеты идентификаторов клиентов.

В Для того, чтобы поддержать мою проблему. Я приложил фрагмент двух фреймов данных

# DataFrame 1
dFrame_main = ({'Pageviews': [22.0,
  22.0,
  21.0,
  20.0,
  18.0,
  15.0,
  14.0,
  14.0,
  13.0,
  13.0,
  12.0,
  12.0,
  12.0,
  12.0,
  12.0,
  12.0,
  12.0,
  12.0,
  11.0,
  11.0],
 'Unique Pageviews': [8.0,
  8.0,
  16.0,
  14.0,
  14.0,
  12.0,
  13.0,
  12.0,
  13.0,
  13.0,
  8.0,
  8.0,
  5.0,
  11.0,
  12.0,
  7.0,
  9.0,
  9.0,
  5.0,
  5.0],
 'Avg. Time on Page': ['0:00:23',
  '0:00:23',
  '0:03:49',
  '0:00:31',
  '0:00:21',
  '0:00:27',
  '0:00:38',
  '0:00:15',
  '0:01:24',
  '0:00:20',
  '0:00:13',
  '0:00:13',
  '0:02:14',
  '0:00:33',
  '0:00:46',
  '0:00:14',
  '0:01:08',
  '0:01:08',
  '0:01:51',
  '0:01:51'],
 'CustomerID_1': ['465',
  '465',
  '162',
  '124',
  '920',
  '920',
  '920',
  '920',
  '920',
  '920',
  '165',
  '165',
  '166',
  '920',
  '920',
  '920',
  '162',
  '162',
  '1846',
  '118'],
 'CustomerID_2': ['702',
  '702',
  '446',
  '125',
  '470',
  '470',
  '470',
  '470',
  '470',
  '212',
  '1920',
  '1920',
  '868',
  '470',
  '470',
  '470',
  '873',
  '873',
  '862',
  '862'],
 'CustomerID_3': ['167',
  '167',
  '570',
  np.nan,
  '212',
  '212',
  '212',
  '212',
  '212',
  np.nan,
  '1670',
  '1670',
  '274',
  '212',
  '212',
  '212',
  '764',
  '764',
  '584',
  '584']})
# DataFrame 2
dFrame = pd.DataFrame({'CustomerID': [569,
  923,
  162,
  1798,
  920,
  470,
  1943,
  1798,
  162,
  124,
  1053,
  212,
  923,
  1747,
  1921,
  166,
  165,
  465,
  862,
  584],
 'CustomerNames': ['Thomas Bills',
  'Demi Boras',
  'Jerry wills',
  'Pills Wilson',
  'Jerry wills',
  'Harsh wilson',
  'Alli Pees',
  'Pills Wilson',
  'Jerry wills',
  'Pills Wilson',
  'Fedolls Feba',
  'Pills Wilson',
  'Demi Boras',
  'Harsh wilson',
  'Matt Lills',
  'Pills Wilson',
  'Twist Tells',
  'Jerry wills',
  'Matt Lills',
  'Balls tails']})

Обратите внимание: Это просто фрагмент большого фрейма данных, так что вы можете решить asp проблему Я пытаюсь решить.

Я пытался go это Как отобразить один кадр данных на другой (python pandas)? , к сожалению, это не помогает моей ситуация.

Спасибо за ваше время

1 Ответ

1 голос
/ 22 марта 2020
# Build a mapper series. For this to work we need to ensure that 
# - the datatypes are the same (string)
# - that we have no repeated values

mapper = dFrame.astype(str).drop_duplicates().set_index('CustomerID')['CustomerNames']

# Apply the mapping (the value of the column will be looked up in the index of the `mapper` series)
dFrame_main['CustomerID_1_name'] = dFrame_main['CustomerID_1'].map(mapper)
dFrame_main['CustomerID_2_name'] = dFrame_main['CustomerID_2'].map(mapper)
dFrame_main['CustomerID_3_name'] = dFrame_main['CustomerID_3'].map(mapper)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...