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

如何将Pandas DataFrame转为按房间分类的任务列表以生成PDF?

按房间层级生成清洁任务清单的Pandas最优实现

问题背景

需要生成PDF格式的任务清单,要求结构为房间下包含对应任务的层级形式。现有记录每周各房间清洁任务的Pandas DataFrame:

import pandas as pd

data = {
    "Room": ["Hallway", "Hallway", "Front Room", "Front Room", "Front Room", "Front Room", "Front Room", "Living Room", "Living Room", "Living Room"],
    "Task": ["Vacuum floor", "Mop floor", "Vacuum floor", "Empty Vacuum Cleaner", "Wipe skirting boards with slightly damp cloth", "Mop floor", "If tablecloth is dirty, change tablecloth", "Vacuum floor", "Wipe skirting boards with slightly damp cloth", "Tidy sofa"],
    "Weeks": ["ABCD", "ABCD", "ABCD", "ABCD", "A", "ABCD", "ABCD", "ABCD", "A", "ABCD"]
}
task_data = pd.DataFrame(data)

尝试使用groupby方法筛选指定周的任务,但未得到预期的层级结构:

schedule_week = "A"  # 示例周数
today_tasks = (
    task_data[task_data["Weeks"].str.contains(schedule_week)]
    .groupby("Room", group_keys=True)
    .apply(lambda x: x)
)
print(today_tasks.head(10))

希望找到符合Pandas原生风格的最优实现,避免循环转字典的方式。

解决方案

方法1:使用groupby + agg生成嵌套结构

直接通过agg将每个房间的任务收集为列表,得到房间到任务列表的映射,这是最符合Pandas原生风格的方式:

schedule_week = "A"
room_tasks = (
    task_data[task_data["Weeks"].str.contains(schedule_week)]
    .groupby("Room")["Task"]
    .agg(list)
    .to_dict()
)

输出的room_tasks是标准嵌套字典,结构清晰:

{
    'Front Room': [
        'Vacuum floor',
        'Empty Vacuum Cleaner',
        'Wipe skirting boards with slightly damp cloth',
        'Mop floor',
        'If tablecloth is dirty, change tablecloth'
    ],
    'Hallway': ['Vacuum floor', 'Mop floor'],
    'Living Room': [
        'Vacuum floor',
        'Wipe skirting boards with slightly damp cloth',
        'Tidy sofa'
    ]
}

方法2:直接生成PDF兼容的Markdown层级内容

如果要直接生成可用于PDF的结构化文本(比如Markdown格式),可以在分组后直接拼接内容:

schedule_week = "A"
markdown_output = ""

# 分组并生成Markdown层级
for room, tasks in (
    task_data[task_data["Weeks"].str.contains(schedule_week)]
    .groupby("Room")["Task"]
):
    markdown_output += f"### {room}\n"
    for task in tasks:
        markdown_output += f"- {task}\n"

print(markdown_output)

输出的Markdown内容可直接用于生成PDF:

### Hallway
- Vacuum floor
- Mop floor
### Front Room
- Vacuum floor
- Empty Vacuum Cleaner
- Wipe skirting boards with slightly damp cloth
- Mop floor
- If tablecloth is dirty, change tablecloth
### Living Room
- Vacuum floor
- Wipe skirting boards with slightly damp cloth
- Tidy sofa

方法说明

  • 方法1的agg(list)是Pandas原生聚合操作,性能优于手动循环,代码简洁易读。
  • 方法2通过groupby后的迭代生成Markdown,既符合Pandas分组逻辑,又直接得到可用于PDF的结构化内容,无需额外转换字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:01