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

基于三元组键字典构造人员-日期维度的Pandas DataFrame

问题描述

给定一个字典,键是三元组(i, t, k):

  • i = 人员索引
  • t = 日期
  • k = 班次
    对应的值为0.0或1.0,值为1.0代表该人员在对应日期的该班次需要上班。

需要构造一个Pandas DataFrame,要求:

  • 行索引为人员索引i
  • 列为日期t
  • 单元格内容:如果当天有上班班次,显示对应的k;无上班则显示0

预期输出格式如下:

Day 1  Day 2  Day 3
Person
1        2      2      0
2        1      0      1
3        1      2      0

给定的字典代码:

import pandas as pd

work_dict = {(1, 1, 1): 0.0, (1, 1, 2): 1.0, (1, 2, 1): 0.0, (1, 2, 2): 1.0, (1, 3, 1): 0.0, (1, 3, 2): 0.0, 
             (2, 1, 1): 1.0, (2, 1, 2): 0.0, (2, 2, 1): 0.0, (2, 2, 2): 0.0, (2, 3, 1): 1.0, (2, 3, 2): 0.0, 
             (3, 1, 1): 1.0, (3, 1, 2): 0.0, (3, 2, 1): 0.0, (3, 2, 2): 1.0, (3, 3, 1): 0.0, (3, 3, 2): 0.0}
解决方案

直接通过以下代码实现需求:

import pandas as pd

work_dict = {(1, 1, 1): 0.0, (1, 1, 2): 1.0, (1, 2, 1): 0.0, (1, 2, 2): 1.0, (1, 3, 1): 0.0, (1, 3, 2): 0.0, 
             (2, 1, 1): 1.0, (2, 1, 2): 0.0, (2, 2, 1): 0.0, (2, 2, 2): 0.0, (2, 3, 1): 1.0, (2, 3, 2): 0.0, 
             (3, 1, 1): 1.0, (3, 1, 2): 0.0, (3, 2, 1): 0.0, (3, 2, 2): 1.0, (3, 3, 1): 0.0, (3, 3, 2): 0.0}

# 把字典转换成DataFrame,拆分三元组键为三列
df = pd.DataFrame([(i, t, k, v) for (i, t, k), v in work_dict.items()],
                  columns=['Person', 'Day', 'Shift', 'Is_Working'])

# 筛选出上班的记录(Is_Working=1.0)
working_records = df[df['Is_Working'] == 1.0]

# 构造透视表,行是Person,列是Day,值为Shift,缺失值填充为0
result_df = working_records.pivot(index='Person', columns='Day', values='Shift').fillna(0)

# 给列名加上"Day "前缀,匹配预期格式
result_df.columns = [f'Day {col}' for col in result_df.columns]

# 打印结果
print(result_df)

代码说明

  1. 先把字典的键值对拆分成结构化的DataFrame,方便后续处理;
  2. 只保留实际上班的记录,排除掉值为0.0的条目;
  3. 用透视表把人员和日期对应起来,自动匹配对应的上班班次,没有上班的位置用0填充;
  4. 最后调整列名格式,和预期输出一致。

运行代码后,输出结果和预期完全匹配。

内容的提问来源于stack exchange,提问作者nflgreaternba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:28