求助:如何用Pandas按多列活动数据划分用户活跃度类别
用Pandas实现用户活动水平分组(匹配谷歌数据分析认证案例逻辑)
核心思路
先计算4个活动水平列的全局均值,再通过逐行判断,将用户分到对应类别:仅某一列高于均值且其余三列均低于均值。
步骤与代码实现
假设你的DataFrame列名为sedentary_minutes(久坐分钟)、lightly_active_minutes(轻度活跃分钟)、fairly_active_minutes(中度活跃分钟)、very_active_minutes(高度活跃分钟),按以下步骤操作:
- 导入依赖库
import pandas as pd import numpy as np
- 计算各活动列的均值
先提取目标列,计算每列的全局均值:
# 提取4个活动水平列 activity_cols = ['sedentary_minutes', 'lightly_active_minutes', 'fairly_active_minutes', 'very_active_minutes'] # 计算每列均值 activity_means = df[activity_cols].mean()
- 定义分组条件与标签
用布尔条件匹配每个类别的规则,再对应到分类标签:
# 定义各分类的布尔条件 conditions = [ # Sedentary:仅久坐数据高于均值,其余均低于 (df['sedentary_minutes'] > activity_means['sedentary_minutes']) & (df['lightly_active_minutes'] < activity_means['lightly_active_minutes']) & (df['fairly_active_minutes'] < activity_means['fairly_active_minutes']) & (df['very_active_minutes'] < activity_means['very_active_minutes']), # Lightly Active:仅轻度活跃数据高于均值,其余均低于 (df['lightly_active_minutes'] > activity_means['lightly_active_minutes']) & (df['sedentary_minutes'] < activity_means['sedentary_minutes']) & (df['fairly_active_minutes'] < activity_means['fairly_active_minutes']) & (df['very_active_minutes'] < activity_means['very_active_minutes']), # Fairly Active:仅中度活跃数据高于均值,其余均低于 (df['fairly_active_minutes'] > activity_means['fairly_active_minutes']) & (df['sedentary_minutes'] < activity_means['sedentary_minutes']) & (df['lightly_active_minutes'] < activity_means['lightly_active_minutes']) & (df['very_active_minutes'] < activity_means['very_active_minutes']), # Very Active:仅高度活跃数据高于均值,其余均低于 (df['very_active_minutes'] > activity_means['very_active_minutes']) & (df['sedentary_minutes'] < activity_means['sedentary_minutes']) & (df['lightly_active_minutes'] < activity_means['lightly_active_minutes']) & (df['fairly_active_minutes'] < activity_means['fairly_active_minutes']) ] # 对应分类标签 labels = ['Sedentary', 'Lightly Active', 'Fairly Active', 'Very Active']
- 添加分类列到DataFrame
用np.select将条件匹配结果映射到标签,default='Other'处理不符合任何单一条件的用户(比如多列均高于均值的情况):
df['activity_category'] = np.select(conditions, labels, default='Other')
验证结果
可以查看各分类的用户数量,确认分组是否符合预期:
print(df['activity_category'].value_counts())
内容的提问来源于stack exchange,提问作者Teresa
相关产品推荐
相关产品推荐

