Python pandas: 连接列查找
Python pandas: concatenated column lookup
使用基于 Google 分析数据的 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和referral进行了交易。
为了正确聚合,我需要添加以下列
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
我基本上是在朝着一个支点努力,我可以在其中按列 "medium".
的所有迭代总结客户 KPI 或唯一客户计数
- 仅每次点击费用
- 仅限推荐
- 仅限有机
- 每次点击费用和推荐
- 每次点击费用和自然搜索
- 推荐和有机
- 每次点击费用、推荐和自然
重要的是,以上值在列中是唯一的,因此不是 "cpc & referral" 一次和 "referral & cpc" 一次。格式是什么并不重要 - & 或逗号;最简单的。
我可能需要创建一个查找 table,像这样:
Customer |medium_year
ABC cpc only
BCD cpc, referral
CDE referral, organic
DEF organic, referral, cpc
一旦我有了它,我就可以使用 .loc 或查找。但是如何创建查找 table?还是有更简单的方法?谢谢
您可以使用 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
使用基于 Google 分析数据的 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和referral进行了交易。
为了正确聚合,我需要添加以下列
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
我基本上是在朝着一个支点努力,我可以在其中按列 "medium".
的所有迭代总结客户 KPI 或唯一客户计数- 仅每次点击费用
- 仅限推荐
- 仅限有机
- 每次点击费用和推荐
- 每次点击费用和自然搜索
- 推荐和有机
- 每次点击费用、推荐和自然
重要的是,以上值在列中是唯一的,因此不是 "cpc & referral" 一次和 "referral & cpc" 一次。格式是什么并不重要 - & 或逗号;最简单的。
我可能需要创建一个查找 table,像这样:
Customer |medium_year
ABC cpc only
BCD cpc, referral
CDE referral, organic
DEF organic, referral, cpc
一旦我有了它,我就可以使用 .loc 或查找。但是如何创建查找 table?还是有更简单的方法?谢谢
您可以使用 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