Pandas 在 groupby 的时候根据条件新建多列

相信用过 Pandas 的人都用过 groupby,但是很多人在用的时候只是简单的对某些字段进行 sum、mean 之类的聚合运算,可能用完了感觉这玩意儿和 Excel 的透视表差不多,甚至还没有 Excel 的透视表好用!相信你今天看了这篇文章,肯定会惊叹,原来 groupby 还可以这么用,功能这么强大。

本篇文章源自实际工作中的内容,数据内容已作脱敏处理。

假如你在工作中遇到类似格式的数据集,你将要探索以下问题。

1、每个区域有多少个点位一个刷脸用户也没有?(一台自动售货机就是一个点位,点位可以理解成一个微型便利店。)

2、每个区域刷脸用户占比是多少?

3、每个区域刷脸 MAU 占比超过 50% 以上的点位有多少?

4、每个区域刷脸笔数超过 100 笔的点位有多少?

针对上述三个问题,用 Pandas 该怎么处理呢?下面我们来看看怎么用 groupby 一次性解决上述所有问题。

1.加载需要的模块并读取源文件。

import pandas as pd
df = pd.read_excel('测试.xlsx')                                                                                                         

2.用 groupby 解决上述问题

df_result = df.groupby('区域').apply(lambda x: pd.Series(dict(
    零刷脸设备台数=(x['支付宝刷脸MAU'] == 0).sum(),
    刷脸MAU占比超过50=((x['支付宝刷脸MAU'])/(x['总在线支付MAU']) > 0.5).sum(),
    刷脸笔数超过100笔的台数=(x['支付宝刷脸销量'] >= 100).sum(),
    支付宝刷脸MAU占比=((x['支付宝刷脸MAU'].sum())/(x['总在线支付MAU']).sum())
)))

df_result.reset_index(inplace=True)
df_result['支付宝刷脸MAU占比'] = df_result['支付宝刷脸MAU占比'].map(lambda x: format(x, '.1%'))
df_result

输出结果如下:

看完上述例子后,是不是认识到了 groupby 的强大,赶紧试试吧!

为了及时收到文章更新,欢迎关注个人公众号:Python实战数据分析

发表评论

电子邮件地址不会被公开。