基于字典列表的Pandas分组:按星期几与小时分组需求
解决方案:用Pandas实现hour为行、星期几为列的分组格式
没问题!要把你的字典列表转换成以hour为行、星期几为列的交叉表格式,用Pandas的pivot_table就能轻松搞定,下面是具体操作步骤:
步骤1:导入Pandas并加载数据
首先把你的数据转换成Pandas DataFrame,同时注意统一hour的类型(避免原数据里出现9和09这种混合格式导致分组错误):
import pandas as pd # 你的原始数据(若原数据里有字符串格式的"09",后续转换步骤会自动处理) data = [ {"avg": 52, "hour": 9, "dayname": "Friday"}, {"avg": 1, "hour": 10, "dayname": "Friday"}, {"avg": 12, "hour": 11, "dayname": "Friday"}, {"avg": 3, "hour": 12, "dayname": "Friday"}, {"avg": 12, "hour": 9, "dayname": "Saturday"}, {"avg": 30, "hour": 10, "dayname": "Saturday"}, {"avg": 66, "hour": 11, "dayname": "Saturday"}, {"avg": 45, "hour": 12, "dayname": "Saturday"} ] # 转换成DataFrame df = pd.DataFrame(data) # 确保hour是整数类型(自动处理字符串格式的"09"转成9) df['hour'] = df['hour'].astype(int)
步骤2:生成目标交叉表格式
用pivot_table重构表格,指定行是hour、列是dayname、值是avg:
# 生成目标格式的表格,aggfunc='first'是因为每个hour+星期的组合只有一条数据 result = df.pivot_table(index='hour', columns='dayname', values='avg', aggfunc='first') # 打印结果 print(result)
执行后你会得到完全符合预期的输出:
dayname Friday Saturday hour 9 52 12 10 1 30 11 12 66 12 3 45
可选:自定义星期几的列顺序
如果想按特定顺序排列星期几的列(比如从周一到周日,或者你需要的优先级),可以手动指定列顺序:
# 自定义星期顺序(比如先显示Friday再显示Saturday) week_order = ['Friday', 'Saturday'] result = result[week_order]
小提示:pivot vs pivot_table
- 如果你的数据中每个hour+dayname的组合只有一条记录,用
df.pivot(index='hour', columns='dayname', values='avg')也能得到同样结果; pivot_table更灵活,当存在重复的hour+dayname组合时,可以用aggfunc='mean'(求平均)、aggfunc='sum'(求和)等聚合函数处理,适用性更广。
内容的提问来源于stack exchange,提问作者MMMMS
相关产品推荐
相关产品推荐

