Python pandas:连接列查找

Posted

技术标签:

【中文标题】Python pandas:连接列查找【英文标题】:Python pandas: concatenated column lookup 【发布时间】:2017-09-07 15:28:10 【问题描述】:

使用基于 Google Analytics 数据的 python pandas 数据框:

Customer | medium   | dollars | date
ABC        cpc         43       04062015
ABC        cpc         35       05042015
BCD        cpc         25       02012015
BCD        referral    15       01112015
CDE        referral    67       03262015
CDE        organic     66       04042015
CDE        organic     15       03062015
DEF        organic     33       07092015
DEF        referral    90       01052015
DEF        cpc         57       04122015

您可以看到客户 ABC 仅通过 cpc 进行交易,而客户 BCD 通过 cpc 和推荐进行交易。

为了正确的聚合,我需要添加以下列

Customer | medium   | dollars | date       |medium_year
ABC        cpc         43       04062015    cpc
ABC        cpc         35       05042015    cpc
BCD        cpc         25       02012015    cpc, referral
BCD        referral    15       01112015    cpc, referral
CDE        referral    67       03262015    referral, organic
CDE        organic     66       04042015    referral, organic
CDE        organic     15       03062015    referral, organic
DEF        organic     33       07092015    organic, referral, cpc
DEF        referral    90       01052015    organic, referral, cpc
DEF        cpc         57       04122015    organic, referral, cpc

我基本上正在努力实现一个支点,我可以通过“中等”列的所有迭代来总结客户 KPI 或唯一客户数量。

仅限每次点击费用 仅供参考 仅限有机 每次点击费用和推荐 每次点击费用和有机 推荐和有机 每次点击费用、推荐和有机

重要的是,上述值在列中是唯一的,因此它不是一次“cpc & Referral”和“referral & cpc”一次。格式是什么都没关系 - & 或逗号;最简单的。

我可能需要创建一个查找表,如下所示:

Customer |medium_year
ABC        cpc only
BCD        cpc, referral
CDE        referral, organic
DEF        organic, referral, cpc

一旦有了,我就可以使用 .loc 或查找。但是如何创建查找表?或者有没有更简单的方法?谢谢你

【问题讨论】:

【参考方案1】:

您可以使用groupby()transform() 执行此操作,例如:

>>> df['medium_year'] = df.groupby('Customer')['medium'].transform(lambda x: ', '.join(set(x)))
>>> df
  Customer    medium  dollars     date             medium_year
0      ABC       cpc       43  4062015                     cpc
1      ABC       cpc       35  5042015                     cpc
2      BCD       cpc       25  2012015           cpc, referral
3      BCD  referral       15  1112015           cpc, referral
4      CDE  referral       67  3262015       referral, organic
5      CDE   organic       66  4042015       referral, organic
6      CDE   organic       15  3062015       referral, organic
7      DEF   organic       33  7092015  referral, organic, cpc
8      DEF  referral       90  1052015  referral, organic, cpc
9      DEF       cpc       57  4122015  referral, organic, cpc

【讨论】:

非常感谢 - 我如何避免“cpc,referral”和“referral,cpc” - 我应该事先按客户和媒介排序吗? 如果set(x) 没有以一致的顺序返回内容,您可以使用sorted(set(x))

以上是关于Python pandas:连接列查找的主要内容,如果未能解决你的问题,请参考以下文章

python Pandas - 将两列连接为字符串

Python Pandas:加入唯一列值并连接

python--pandas合并与连接

如何使用连接来填充列的缺失值 - Python Pandas?

Python Pandas:通过重复项将列组合在一起,并在相应列中连接字符串

连接 Python Pandas 中 if 语句的结果字符串