我有两个熊猫数据帧,我想从一个数据帧(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
答案 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)
编辑:既不简短也不简单,请参见其他答案。