从一个数据框中获取唯一计数作为熊猫中另一个数据框中的值

时间:2018-09-02 02:43:41

标签: python 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 :(得分:4)

似乎需要

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

答案 1 :(得分:1)

简洁:

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

编辑:既不简短也不简单,请参见其他答案。