Python pandas按channel分组求和并新增总量与占比列的实现方法
实现方案
直接用Pandas的transform方法即可,不需要额外的表关联操作,代码简洁易读:
# 1. 新增渠道总销量列:按channel分组求和,结果和原表行对齐 df['units_per_channel'] = df.groupby('channel')['units'].transform('sum') # 2. 新增门店销量占比列:单店销量 / 所属渠道总销量,保留2位小数 df['store_share'] = (df['units'] / df['units_per_channel']).round(2)
如果你需要完整可运行的测试代码,可以参考下面的样例:
import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'channel': ['Offline']*3 + ['Online']*3, 'store': ['Bournemouth', 'Kettering', 'Manchester']*2, 'units': [62, 90, 145, 220, 212, 272] }) # 核心逻辑 df['units_per_channel'] = df.groupby('channel')['units'].transform('sum') df['store_share'] = (df['units'] / df['units_per_channel']).round(2) # 输出结果 print(df)
运行后输出的结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者teogj
相关产品推荐
相关产品推荐

