如何在pandas中按月份分组对Sku哑变量求和并统计唯一账户数
Pandas分组生成哑变量并统计唯一值的解决方法
你之前的写法只对Sku列单独做了哑变量处理,丢失了Acct_id列的信息,所以没法统计唯一账户数。调整方案如下:
基础实现(适配示例数据)
# 生成Sku哑变量并合并到原DataFrame df = pd.get_dummies(df, columns=['Sku'], prefix='', prefix_sep='') # 按月份分组聚合计算 res = df.groupby('Month', as_index=False).agg( book = ('book', 'sum'), phone = ('phone', 'sum'), total_accounts = ('Acct_id', 'nunique') )
通用写法(适配Sku取值多的场景)
如果Sku列有很多取值,不需要手动列所有品类,可直接用动态规则实现:
sku_list = df['Sku'].unique() df = pd.get_dummies(df, columns=['Sku'], prefix='', prefix_sep='') # 构造聚合规则字典 agg_rule = {sku: 'sum' for sku in sku_list} agg_rule['Acct_id'] = 'nunique' # 分组计算后重命名账户统计列 res = df.groupby('Month', as_index=False).agg(agg_rule).rename(columns={'Acct_id': 'total_accounts'})
运行后得到的res就是你需要的预期结果。
内容的提问来源于stack exchange,提问作者titu84hh
相关产品推荐
相关产品推荐

