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

使用Pandas基于指定字典扩展数据集:缺失行追加问题

解决DataFrame追加指定ID-日期组合行的问题

问题分析

你需要向现有数据集追加指定ID(BC、DA)与指定日期(Q1 2022、Q1 2023)的所有组合行,这些新行的energy填充为0,type留空。原代码的核心问题在于:

  • 字典stat语法错误,未正确存储每个ID对应的日期列表
  • 未生成ID与日期的全组合,无法得到期望的4条新行
  • 错误使用merge而非行拼接方法

正确实现步骤

1. 准备基础数据

先将现有数据读取为DataFrame(如果还未完成):

import pandas as pd

# 现有数据
data = [
    ["AA", "Q1 2022", "a", 1],
    ["AA", "Q2 2022", "ok", 1],
    ["AA", "Q3 2022", "yes", 1],
    ["AA", "Q4 2022", "yes", 4],
    ["FC", "Q1 2022", "no", 4],
    ["FC", "Q2 2022", "no", 4],
    ["FC", "Q3 2022", "yes", 45],
    ["FC", "Q4 2022", "yes", 5],
]
df = pd.DataFrame(data, columns=["ID", "Date", "type", "energy"])

# 定义需要追加的ID和日期
target_ids = ["BC", "DA"]
target_dates = ["Q1 2022", "Q1 2023"]

2. 生成要追加的新行

通过笛卡尔积生成所有ID-日期的组合,再构造对应DataFrame:

# 生成ID与日期的全组合
new_rows = pd.MultiIndex.from_product(
    [target_ids, target_dates], 
    names=["ID", "Date"]
).to_frame(index=False)

# 填充其他列的默认值
new_rows["type"] = ""
new_rows["energy"] = 0

3. 拼接原数据与新行

用pd.concat完成行追加(替代已弃用的df.append):

# 合并数据并重置索引
result_df = pd.concat([df, new_rows], ignore_index=True)

最终输出

运行后result_df的内容与你的期望输出完全一致:

ID      Date type  energy
0  AA  Q1 2022    a       1
1  AA  Q2 2022   ok       1
2  AA  Q3 2022  yes       1
3  AA  Q4 2022  yes       4
4  FC  Q1 2022   no       4
5  FC  Q2 2022   no       4
6  FC  Q3 2022  yes      45
7  FC  Q4 2022  yes       5
8  BC  Q1 2022           0
9  DA  Q1 2022           0
10 BC  Q1 2023           0
11 DA  Q1 2023           0

原代码修正说明

  • 原字典stat应改为键值对格式:stat = {"BC": ["Q1 2022", "Q1 2023"], "DA": ["Q1 2022", "Q1 2023"]},但用笛卡尔积的方式更简洁通用
  • 弃用df.append(),改用pd.concat()进行行拼接更符合pandas当前规范
  • 不需要使用merge,该方法用于列关联,此处只需单纯行追加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:30:56