看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在线票务场景下,线上采用多渠道进行销售,每个渠道支持多种的支付方式,pandas 可以帮助我们对渠道和支付方式进行分组分析。本需求特殊的一点时,对于支付工具我们仅区分会员卡方式,其他的方式均会归为其他方式。
我们的业务流水样例数据如下:
import pandas as pd
from io import StringIO
data = '''
销售渠道 支付工具 金额
POS渠道 会员卡 80
猫眼 接入商 30
淘票票 接入商 30
POS渠道 会员卡 40
POS渠道 第三方优惠 50
猫眼 接入商 45
淘票票 接入商 45
POS渠道 银行卡 40
'''
df = pd.read_csv(StringIO(data), sep='\t')
df
'''
销售渠道 支付工具 金额
0 POS渠道 会员卡 80
1 猫眼 接入商 30
2 淘票票 接入商 30
3 POS渠道 会员卡 40
4 POS渠道 第三方优惠 50
5 猫眼 接入商 45
6 淘票票 接入商 45
7 POS渠道 银行卡 40
'''
需要对销售渠道、支付工具进行分组,分组后对金额进行求和。分组过程中,支付工具除会员卡方式,其他的全部归为其他方式,不一一分类。
先对支付工具列进行修改,将非会员卡值替换为其他,再对数据进行分组金额求和。
通过增加同名列的方式对支付工具列进行修改。用 where() 方法对不为会员卡的值替换为其他:
df.assign(支付工具=df.支付工具.where(df.支付工具=='会员卡', '其他'))
'''
销售渠道 支付工具 金额
0 POS渠道 会员卡 80
1 猫眼 其他 30
2 淘票票 其他 30
3 POS渠道 会员卡 40
4 POS渠道 其他 50
5 猫眼 其他 45
6 淘票票 其他 45
7 POS渠道 其他 40
'''
进行分组求和:
(
df.assign(支付工具=df.支付工具.where(df.支付工具=='会员卡', '其他'))
.groupby(['销售渠道', '支付工具'], dropna=False, as_index=False)
.sum()
)
'''
销售渠道 支付工具 金额
0 POS渠道 会员卡 120
1 POS渠道 其他 90
2 淘票票 其他 75
3 猫眼 其他 75
'''
这样就实现了我们的需求。
(完)
更新时间:2024-08-18 15:56:27 标签:pandas python 分组