按列分组后计算另一列项的出现次数及用户session数统计方法咨询
按列分组后计算另一列项的出现次数及用户session数统计方法咨询
看起来你是想统计每个用户对应的会话(session)数量对吧?先看你给的原始数据,我猜应该是有些行的User列是空值,其实是属于上一行的用户?不然输出里User1有4个、User2有2个就不太好解释啦。下面分两种常用的数据处理工具给你说具体方法:
一、用Python Pandas处理
首先得把数据里空的User值填充成上一个非空的User值,再分组统计数量:
import pandas as pd # 假设你的数据读入后存储在df变量中 df['User'] = df['User'].ffill() # 向前填充空的User值,让每行都有对应的用户 session_count = df.groupby('User').size().reset_index(name='session_count') print(session_count)
这样处理后就能得到你想要的结果,对应你给出的示例就是User1有4条会话、User2有2条会话。
如果只有非空的Session id才算有效会话,那把统计逻辑改成针对Session id列计数即可:
session_count = df.groupby('User')['Session id'].count().reset_index(name='session_count')
二、用SQL处理
如果数据存在数据库里,可以先用窗口函数填充空的User值,再分组统计:
WITH filled_data AS ( SELECT User, Session_id, -- 用窗口函数填充空User,取上一个非空的用户值 LAST_VALUE(User IGNORE NULLS) OVER (ORDER BY (SELECT NULL) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS filled_user FROM your_table_name ) SELECT filled_user AS User, COUNT(*) AS session_count FROM filled_data GROUP BY filled_user ORDER BY User;
这里ORDER BY (SELECT NULL)是为了保持原始数据的顺序,如果你有时间戳这类明确的排序字段,替换成它会更准确。
同样,如果只统计非空的Session id,把COUNT(*)改成COUNT(Session_id)就可以了,因为COUNT函数会自动忽略空值。
备注:内容来源于stack exchange,提问作者Sophie Martusewicz
相关产品推荐
相关产品推荐

