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

如何使用Pandas的groupby遍历数组?基于多用户多推广活动CSV数据

使用Pandas Groupby处理用户-广告活动时序数据

看起来你已经拿到了一份包含用户ID、时间戳和广告活动的时序数据集,接下来我会一步步教你用Pandas的groupby工具来遍历和处理这类数据,覆盖不同的分析需求:

第一步:先把数据读进Pandas

首先确保导入Pandas,读取CSV时记得把时间列解析成时间格式(方便后续的时序操作):

import pandas as pd

# 替换成你的CSV文件路径
df = pd.read_csv('your_data.csv', parse_dates=['date'])

方式1:基础遍历——按用户分组处理

最直接的方式是按user_id分组,逐个遍历每个用户的数据集,适合需要针对单个用户做个性化处理的场景:

# 按user_id分组,得到分组对象
user_groups = df.groupby('user_id')

# 遍历每个用户的分组
for user_id, user_data in user_groups:
    print(f"=== 正在处理用户ID: {user_id} ===")
    # 先把该用户的活动按时间排序
    sorted_user_data = user_data.sort_values('date')
    # 打印该用户的活动时序(只展示关键列)
    print(sorted_user_data[['date', 'ad_campaign']])
    # 可以添加自定义逻辑,比如统计该用户的活动类型分布
    campaign_counts = sorted_user_data['ad_campaign'].value_counts()
    print("该用户的广告活动分布:")
    print(campaign_counts)
    print("\n")

遍历过程中,user_id是当前分组的键,user_data是该用户对应的所有行组成的子DataFrame,你可以在循环里对它做任何自定义操作。

方式2:多维度分组——按用户+广告活动组合遍历

如果需要分析每个用户对不同广告活动的交互细节,可以同时按user_id和ad_campaign双维度分组:

# 按用户ID和广告活动双维度分组
user_campaign_groups = df.groupby(['user_id', 'ad_campaign'])

for (user_id, campaign_name), group_data in user_campaign_groups:
    print(f"用户ID: {user_id} | 广告活动: {campaign_name}")
    print(f"交互次数: {len(group_data)}")
    print(f"首次交互时间: {group_data['date'].min()}")
    print(f"末次交互时间: {group_data['date'].max()}")
    print("---")

这里的分组键是一个元组(user_id, campaign_name),对应的group_data是该用户与该广告活动的所有交互记录。

方式3:高效批量处理——用apply替代手动遍历

如果所有分组的处理逻辑都相同,用apply会比手动遍历更高效,代码也更简洁:

# 定义一个处理单个用户分组的函数
def process_user_interactions(group):
    # 1. 按时间排序
    sorted_group = group.sort_values('date')
    # 2. 添加一列:记录用户的活动序列(每次活动变化时递增)
    sorted_group['sequence_id'] = (sorted_group['ad_campaign'] != sorted_group['ad_campaign'].shift()).cumsum()
    # 3. 返回处理后的分组
    return sorted_group

# 将函数应用到每个用户分组,as_index=False避免把user_id设为索引
processed_df = df.groupby('user_id', as_index=False).apply(process_user_interactions)

# 查看处理后的结果
print(processed_df.head(10))

apply会自动把每个用户的子DataFrame传入函数,处理完成后合并成一个完整的DataFrame。

小技巧:快速查看单个分组

如果你想快速查看某个特定用户的分组数据,可以用get_group方法:

# 获取用户ID为151312395的所有数据
specific_user_data = user_groups.get_group(151312395)
print(specific_user_data)

内容的提问来源于stack exchange,提问作者Laila Van Ments

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:15