如何用Python/Pandas统计特定用户Bob的月度工作、州维度数据量?
解决Bob每月工作代码与州的精准统计问题
嘿,我来帮你搞定这个统计需求!处理数万条记录的话,用Pandas的组合操作完全可以一次性搞定精准统计,我之前处理过类似规模的数据,这个方法效率和准确性都没问题。
第一步:先确保日期列是datetime类型
如果你的日期列还不是datetime格式,先转换一下,不然没法按月精准分组:
import pandas as pd # 假设你的数据框叫df,日期列是'date' df['date'] = pd.to_datetime(df['date'])
第二步:筛选Bob的数据+提取年月维度
先把Bob的记录单独筛出来,然后从日期里提取完整年月(比如2024-05),避免不同年份的同月被错误合并:
# 筛选Bob的数据,用copy()避免后续操作触发SettingWithCopyWarning bob_data = df.loc[df['user'] == 'Bob'].copy() # 新增月份列,to_period('M')会生成格式统一的年月标识 bob_data['month'] = bob_data['date'].dt.to_period('M')
第三步:多维度分组统计核心操作
这一步就是关键了,用groupby同时按月份、工作代码、州三个维度分组,然后用size()统计每组的记录数,最后用reset_index()把结果转成易读的表格格式:
# 一次性得到每个月、每个工作代码、每个州的精准统计数 stats_result = bob_data.groupby(['month', 'job_code', 'state']).size().reset_index(name='count')
输出的stats_result里,每一行都对应Bob在某个月份、某个工作代码、某个州的记录数量,完全不会有遗漏或重复统计的问题。
可选:用透视表更直观展示分布
如果想一眼对比同一月份同一工作代码下不同州的数量差异,可以用透视表整理结果:
pivot_result = pd.pivot_table( bob_data, index=['month', 'job_code'], columns='state', values='user', aggfunc='count', fill_value=0 # 把无记录的州填充为0,避免空值 )
为什么之前的groupby不够精准?
大概率是你之前只按部分维度分组(比如只按月份+工作代码,没加州),或者没正确处理日期的年月绑定(比如只用dt.month得到1-12的数字,导致不同年份的同月被合并)。上面的方法用to_period('M')把年月作为整体维度,再加上三个维度的联合分组,就能彻底解决这个问题。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

