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

如何用Pandas按用户分组统计事件出现次数并生成新列

Pandas按用户分组统计事件类型次数并生成新列

这里提供三种实用方法来实现你的需求,以下是具体示例:

方法1:针对单个事件类型生成新列

如果只需要统计某一个特定event_type_id(比如示例中的0)的次数,可以用groupby结合transform,保持原数据行数的同时,将统计结果匹配到每一行对应的用户:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'User': [1, 1, 1, 2, 2, 3],
    'event_type_id': [0, 0, 1, 0, 2, 1]
})

# 统计每个User的event_type_id=0的次数,存入Post列
df['Post'] = df.groupby('User')['event_type_id'].transform(lambda x: (x == 0).sum())

执行后结果示例:

Userevent_type_idPost
102
102
112
201
221
310

方法2:统计多个事件类型并生成对应列

如果需要同时统计多种event_type_id的次数并生成多个新列,可用pd.crosstab生成交叉计数表,再合并回原数据:

# 生成用户与事件类型的交叉计数表
count_table = pd.crosstab(df['User'], df['event_type_id'])

# 重命名列并合并到原数据
df = df.merge(
    count_table.rename(columns={0: 'Post', 1: 'Action_1', 2: 'Action_2'}),
    on='User',
    how='left'
)

执行后会新增Post、Action_1、Action_2三列,分别对应各事件类型的次数。

方法3:批量统计所有事件类型

如果event_type_id的取值较多,可通过groupby+value_counts+unstack批量生成统计列:

# 按用户分组统计各事件类型次数
counts = df.groupby('User')['event_type_id'].value_counts().unstack(fill_value=0)

# 重命名列并合并
df = df.merge(
    counts.rename(columns=lambda x: f'Event_{x}_Count'),
    on='User',
    how='left'
)

这样会自动为每个event_type_id生成类似Event_0_Count、Event_1_Count的统计列。

内容的提问来源于stack exchange,提问作者Davi de Paulo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:24:31