Получите уникальные значения из одного фрейма данных в качестве значений в другом фрейме данных в Pandas - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть два фрейма данных pandas, и я хочу получить уникальное количество строк из одного фрейма данных (responses) в качестве значений столбца в другом фрейме данных (contacts)

import pandas as pd

contacts = pd.read_csv('contacts.csv', encoding='ISO-8859-1')
responses = pd.read_csv('campaign_responses.csv', encoding='ISO-8859-1')

contacts.head()

    contact_id          job_title  country  Email    Webinar
0   0031B00002cPLuFQAW  manager    US       0        0
1   0031B00002Z2zMYQAZ  admin      UK       0        0
2   003a000001nHioCAAS  manager    DE       0        0

Примечание. Адрес электронной почты и вебинар будут равны 0 для всех строк. На данный момент они являются значениями-заполнителями.

responses.head()

    campaign_type      contact_id
0   Email              0031B00002cPLuFQAW
1   Webinar            0031B00002Z2zMYQAZ
2   Webinar            0031B00002cPLuFQAW
3   Webinar            0031B00002cPLuFQAW
4   Email              003a000001nHioCAAS
5   Email              003a000001nHioCAAS

Я бы хотел узнать, сколько раз каждый контакт отвечал на каждый тип кампании в качестве атрибута во фрейме данных контактов.

Окончательный contacts кадр данных должен выглядеть следующим образом (на основе данных выше)

    contact_id          job_title  country  Email    Webinar
0   0031B00002cPLuFQAW  manager    US       1        2
1   0031B00002Z2zMYQAZ  admin      UK       0        1
2   003a000001nHioCAAS  manager    DE       2        0

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Похоже, вам нужно

pd.crosstab(df.contact_id,df.campaign_type)
Out[37]: 
campaign_type       Email  Webinar
contact_id                        
0031B00002Z2zMYQAZ      0        1
0031B00002cPLuFQAW      1        2
003a000001nHioCAAS      2        0
0 голосов
/ 02 сентября 2018

Коротко и просто:

df.groupby(['contact_id', 'campaign_type']).size().unstack('type', fill_value=0)

Редактировать: ни коротко, ни просто, см. Другой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...