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

如何在Pandas中追加不在指定列表中的季度行并设价格为0

补全DataFrame缺失季度行的实现方案

需求说明

现有包含设施季度价格数据的DataFrame,仅存在Q1、Q2的记录;需要根据给定的季度列表['Q1','Q2','Q3','Q4'],为缺失的季度追加对应行,且缺失行的Price设为0。

准备代码

先生成原始DataFrame和季度列表:

import pandas as pd
from io import StringIO

# 生成原始数据
df = """    
Facility    Quarter   Price
      F1    Q1         2.1  
      F1    Q2         1.2  
"""
df = pd.read_csv(StringIO(df.strip()), sep='\s\s+', engine='python')

quarters = ['Q1','Q2','Q3','Q4']

方法一:全量组合+左连接填充

先构造包含所有设施与季度的完整行集合,再与原始数据合并补全缺失值:

# 获取所有唯一设施
facilities = df['Facility'].unique()

# 生成设施-季度的全量笛卡尔积
full_comb = pd.MultiIndex.from_product([facilities, quarters], names=['Facility', 'Quarter']).to_frame(index=False)

# 左连接原始数据,缺失Price填充0
result = pd.merge(full_comb, df, on=['Facility', 'Quarter'], how='left').fillna({'Price': 0})

print(result)

方法二:多级索引重排

通过设置多级索引,重索引补全缺失项后填充0:

# 设置Facility和Quarter为多级索引
df.set_index(['Facility', 'Quarter'], inplace=True)

# 生成包含所有设施与季度的全量索引
full_index = pd.MultiIndex.from_product([df.index.get_level_values(0).unique(), quarters], names=['Facility', 'Quarter'])

# 重索引并填充0,最后重置索引为列
result = df.reindex(full_index, fill_value=0).reset_index()

print(result)

输出结果

两种方法最终都会得到目标DataFrame:

Facility Quarter  Price
0       F1      Q1    2.1
1       F1      Q2    1.2
2       F1      Q3    0.0
3       F1      Q4    0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:18