如何基于DataFrame的User列统计Action列各唯一值计数并重构表格
解决方案
可以用以下几种方法实现你需要的用户-页面访问次数统计:
方法1:使用pd.crosstab(最简洁)
crosstab专门用于统计两个列的交叉频次,刚好匹配你的需求:
import pandas as pd # 假设你的原始DataFrame是df result = pd.crosstab(df['User'], df['Action']).reset_index() # 确保空值填充为0且是整数类型 result = result.fillna(0).astype(int) print(result)
运行后输出格式完全符合要求:
User Page1 Page2 Page3 0 AA 2 1 0 1 BB 0 1 1 2 CC 0 0 2
方法2:使用pivot_table(更灵活)
如果后续需要扩展聚合逻辑,用透视表适配性更强:
result = df.pivot_table( index='User', columns='Action', aggfunc='size', # 统计每组的行数 fill_value=0 # 直接将缺失计数填充为0 ).reset_index() result.columns.name = None # 移除列索引的"Action"标识 print(result)
这个方法通过分组计数后转宽表,同样能得到目标结果,适合更复杂的统计场景。
补充说明
你之前用df['User'].value_counts()只能统计每个用户的总操作次数,而要拆分到具体页面,核心是按用户和页面分组计数,再将页面维度转成列,上面两种方法本质都是完成这个逻辑。
内容的提问来源于stack exchange,提问作者SM079
相关产品推荐
相关产品推荐

