Python中RFV分析的类别月度使用频次均值计算需求
RFV分析中Frequency(频次)计算的Python代码实现
需求说明
在RFV分析中,**Frequency(频次)**定义为:各类别在所有月份中每月使用总次数的平均值。例如类别A的月度使用数据如下:
| Category | Average used |
|---|---|
| A - jan | 10 |
| A - feb | 12 |
| A - mar | 14 |
| total average | 12 |
计算后类别A的频次均值为12。
已有代码基础
现有分组聚合代码如下,其中date和id_licenca对应的聚合逻辑无需修改,仅需添加频次计算逻辑:
df2 = df = df.groupby('category').agg({ 'date' : lambda x: (dt_ref - x.max()).days, 'id_licenca' : lambda x: len(x) })
期望输出格式
最终需要得到包含类别及对应频次均值的结果:
| Category | Average used |
|---|---|
| A | 12 |
| B | 17 |
| C | 11 |
完整实现代码
假设原始数据中,category字段包含类似"A - jan"的月份后缀,usage_count字段记录每月使用总次数,完整代码如下:
# 从原始category字段提取不带月份的基础类别 df['base_category'] = df['category'].str.split(' - ', expand=True)[0] # 分组聚合:保留原有逻辑,新增频次均值计算 df2 = df.groupby('base_category').agg( Recency=('date', lambda x: (dt_ref - x.max()).days), Total_Licenses=('id_licenca', lambda x: len(x)), Average_used=('usage_count', 'mean') # 新增:计算每月使用总次数的平均值 ).reset_index().rename(columns={'base_category': 'Category'}) # 若仅需目标两列,可筛选输出 df_final = df2[['Category', 'Average_used']] print(df_final)
代码说明
- 通过字符串分割从原始
category字段中提取基础类别(如从"A - jan"得到"A") - 在
groupby的agg方法中新增Average_used计算,直接用'mean'聚合函数得到每月使用总次数的平均值 - 最后通过
reset_index和rename调整列名,若只需要目标格式的两列,可筛选后输出
内容的提问来源于stack exchange,提问作者user21051730
相关产品推荐
相关产品推荐

