使用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
相关产品推荐
相关产品推荐

