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

Python:按用户统计不同类型下各操作的出现次数

解决方案:按用户统计不同Type下的Action次数

嘿,这个需求用Pandas分分钟就能搞定,我给你两种实用的方法,你可以按需选择~

方法一:拼接分类列 + 透视表

先把原始数据转换成DataFrame,再通过拼接Type和Action得到目标里的列名格式,最后用透视表统计次数:

import pandas as pd

# 1. 构造原始DataFrame
data = {
    'User': ['User1', 'User1', 'User2', 'User2', 'User2', 'User3', 'User3', 'User4', 'User4', 'User1', 'User1'],
    'Type': ['Game', 'Game', 'Movie', 'Movie', 'Movie', 'Movie', 'Movie', 'Game', 'Movie', 'Movie', 'Movie'],
    'Action': ['Start', 'End', 'Start', 'Start', 'End', 'Start', 'End', 'Start', 'Start', 'Start', 'End']
}
df = pd.DataFrame(data)

# 2. 拼接Type和Action为目标列名格式(Type保持大写,Action转小写并用下划线连接)
df['Category'] = df['Type'] + '_' + df['Action'].str.lower()

# 3. 用透视表统计每个用户的各分类次数,缺失值自动填0
result = df.pivot_table(index='User', columns='Category', aggfunc='size', fill_value=0).reset_index()

# 4. 调整列顺序匹配你要的目标格式
target_columns = ['User', 'Game_start', 'Movie_start', 'Game_end', 'Movie_end']
result = result[target_columns]

print(result)

运行后输出的结果完全符合你的预期:

User  Game_start  Movie_start  Game_end  Movie_end
0  User1           1            1         1          1
1  User2           0            2         0          1
2  User3           0            1         0          1
3  User4           1            1         0          0

方法二:使用交叉表(crosstab)

如果觉得透视表有点绕,用pd.crosstab交叉表会更直接,步骤基本一致:

import pandas as pd

# 1. 构造原始DataFrame(和方法一相同)
data = {
    'User': ['User1', 'User1', 'User2', 'User2', 'User2', 'User3', 'User3', 'User4', 'User4', 'User1', 'User1'],
    'Type': ['Game', 'Game', 'Movie', 'Movie', 'Movie', 'Movie', 'Movie', 'Game', 'Movie', 'Movie', 'Movie'],
    'Action': ['Start', 'End', 'Start', 'Start', 'End', 'Start', 'End', 'Start', 'Start', 'Start', 'End']
}
df = pd.DataFrame(data)

# 2. 拼接分类列
df['Category'] = df['Type'] + '_' + df['Action'].str.lower()

# 3. 交叉表直接统计用户与分类的次数分布
result = pd.crosstab(df['User'], df['Category']).reset_index()

# 4. 调整列顺序
target_columns = ['User', 'Game_start', 'Movie_start', 'Game_end', 'Movie_end']
result = result[target_columns]

print(result)

两种方法都能达到你要的效果,选你觉得顺手的就行~

内容的提问来源于stack exchange,提问作者Calafalas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:37:57