看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析中,随机抽样和分组聚合是最常用的两个核心操作——前者帮我们从海量数据中快速提取代表性样本,后者则能按特定维度拆解数据并计算关键指标。本文将通过一个模拟的用户行为数据集,综合演示 sample()(随机抽样)和 groupby().agg()(分组聚合)这两个高频方法的协作应用,最终实现「从原始数据中抽取部分样本,并按用户分群统计关键行为指标」的目标,帮你掌握这两个方法的实战组合技巧。
源数据与读取代码
假设我们有一份电商平台的用户行为日志,包含用户ID、行为类型(浏览/加购/购买)、行为时间戳和商品价格(仅购买行为有值)。以下是模拟数据(字符串格式)及读取代码:
import pandas as pd
from io import StringIO
data = """user_id,action_type,timestamp,price
1001,view,2025-01-01 10:00:00,
1001,add_to_cart,2025-01-01 10:05:00,
1001,purchase,2025-01-01 10:10:00,299.0
1002,view,2025-01-01 11:00:00,
1002,view,2025-01-01 11:05:00,
1002,add_to_cart,2025-01-01 11:10:00,
1003,purchase,2025-01-01 12:00:00,599.0
1003,view,2025-01-01 12:05:00,
1004,add_to_cart,2025-01-01 13:00:00,
1004,purchase,2025-01-01 13:05:00,199.0
1005,view,2025-01-01 14:00:00,
1005,view,2025-01-01 14:05:00,
1005,view,2025-01-01 14:10:00,
1005,add_to_cart,2025-01-01 14:15:00,
1006,purchase,2025-01-01 15:00:00,899.0
"""
df = pd.read_csv(StringIO(data))
print("原始数据预览:")
print(df)
我们需要完成以下两步分析:
正确结果预期:
• 抽样部分:输出的 5 条记录应是从原始 13 条中随机选取的(每次运行结果可能不同,但条数一定是 5);
• 聚合部分:输出类似以下结构(具体数值根据实际分组计算):
user_id view_count add_to_cart_count purchase_count total_purchase_amount
1001 2 1 1 299.0
1002 2 1 0 0.0
...(其他用户)
需求拆解
关键点:
• 分组聚合时,需通过条件筛选分别计算不同行为的次数(例如用 (df['action_type'] == 'view').sum() 的思路,但在分组后需用更高效的方式);
• 累计购买金额只需针对购买行为行提取 price 列求和(其他行为的 price 为空,不影响结果);
• 推荐用链式调用(方法连写)提升代码简洁性,尤其是抽样和聚合的衔接。
随机抽样 + 分组聚合分析用户行为:
# 从df中随机抽5条,random_state固定结果可复现
df.sample(n=5, random_state=42)
块2:分组聚合(核心需求)
(
df
.assign(price_numeric=lambda x: pd.to_numeric(x['price'], errors='coerce')) # 将price列转为数值(非数字变NaN)
.groupby('user_id')
.agg(
view_count=('action_type', lambda x: (x == 'view').sum()), # 浏览次数
add_to_cart_count=('action_type', lambda x: (x == 'add_to_cart').sum()), # 加购次数
purchase_count=('action_type', lambda x: (x == 'purchase').sum()), # 购买次数
total_purchase_amount=('price_numeric', 'sum') # 累计购买金额(自动忽略NaN)
)
)
此案例综合了随机抽样(快速检查数据)和分组聚合(深度分析)两大高频场景,是 pandas 实战中的经典组合。
(完)
更新时间:2025-09-19 15:28:40 标签:pandas python 分组聚合 用户行为