You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于字典列表的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:05