Python中按week列分组统计Visits布尔值占比的实现方法
原代码错误说明
- 你初始定义的
df是Python普通字典,不是Pandas DataFrame对象,不能直接调用.week属性 for j in df.week = u[0]语法不符合Python规范,循环逻辑完全错误- 没有实现按
week字段分组的逻辑,原统计逻辑是全表的Visits值计数,没有分组维度
正确实现代码
直接用Pandas内置的分组统计方法即可实现需求,无需手动写循环:
import pandas as pd import numpy as np # 1. 将字典转为Pandas DataFrame对象 df = pd.DataFrame({'week':["Monday","Tuesday", "Monday", "Monday", "Tuesday"], 'Visits':[True, False, True, True, True]}) # 2. 按week分组,统计每组内Visits的True/False占比,转为百分比后保留2位小数 percent_result = df.groupby('week')['Visits'].value_counts(normalize=True).mul(100).round(2) # 若需要同时展示数量和百分比,可以用下方写法 count_percent_result = df.groupby(['week','Visits']).agg( 数量 = ('Visits','count'), 组内百分比 = ('Visits', lambda x: round(len(x)/len(x.group)*100,2)) ).reset_index() print("仅百分比统计结果:") print(percent_result) print("\n带数量的统计结果:") print(count_percent_result)
输出示例
仅百分比统计结果: week Visits Monday True 100.0 Tuesday True 50.0 False 50.0 Name: Visits, dtype: float64 带数量的统计结果: week Visits 数量 组内百分比 0 Monday True 3 100.0 1 Tuesday False 1 50.0 2 Tuesday True 1 50.0
内容的提问来源于stack exchange,提问作者annavictoria12345678
相关产品推荐
相关产品推荐

