You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

索引层级内聚合:按月度群组计算营收总和与用户总数

解决方法:按群组(Cohort)汇总终身收入与用户总数

嘿,我来帮你搞定这个需求!你想要把带层级索引的分组结果,转换成每个群组对应终身收入总和和用户总数的常规数据表对吧?其实不用绕弯路,直接从原始数据或者现有分组结果都能实现,下面给你两种方案:

方案1:直接从原始DataFrame处理(推荐)

你的原始数据dfsort应该是每条记录对应一个用户的相关数据,所以我们直接按Cohort分组,同时聚合两个指标就好,代码简洁又高效:

import pandas as pd

# 按Cohort分组,计算两个核心指标
cohort_summary = dfsort.groupby('Cohort').agg(
    # 计算该群组的终身收入总和
    Total_Lifetime_Revenue=('Lifetime_Revenue', 'sum'),
    # 计算该群组的唯一用户总数
    Total_Customers=('Customer_ID', pd.Series.nunique)
).reset_index()

预期输出示例:

CohortTotal_Lifetime_RevenueTotal_Customers
2014-01149.91
2014-02299.91
2014-031499.683
2014-041649.723
.........

这里reset_index()的作用是把Cohort从索引列变回普通列,得到标准的二维数据表格式。


方案2:从你已有的分组结果cohorts处理

如果你已经有了按Cohort和Lifetime_Revenue分组后的cohorts数据,也可以基于它进一步汇总:

# 从现有分组数据计算群组汇总
cohort_summary = cohorts.groupby('Cohort').agg(
    # 每个收入值乘以对应用户数,再求和得到总终身收入
    Total_Lifetime_Revenue=lambda x: (x.get_level_values('Lifetime_Revenue') * x['Customer_ID']).sum(),
    # 把该群组下所有用户数相加得到总用户数
    Total_Customers=('Customer_ID', 'sum')
).reset_index()

这个方案是因为你的cohorts里,每一行是某个群组下对应某一收入值的用户数,所以总终身收入需要用「收入值×用户数」再累加,总用户数则是该群组下所有用户数的总和。


两种方案都能得到你想要的常规数据表,优先推荐方案1,直接从原始数据处理更直观,也避免了中间步骤的冗余~

内容的提问来源于stack exchange,提问作者Kbbm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:02:37