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

如何在Pandas多索引中为指定组合插入缺失月份行

解决方案

方法一:交叉连接(Cross Merge)

这种方法直观易懂,先提取原数据中存在的有效utility-state组合,再和所有月份做交叉连接补全缺失行:

import pandas as pd

# 原数据
df = pd.DataFrame({'year':[23,23,23,23,23,23], 'month':[1,1,1,2,3,3], 'utility':['A','A','B','A','A','B'], 'state':['NY','NJ','CA','NJ','NY','CA']})

# 1. 提取原数据中唯一的utility-state组合
unique_pairs = df[['utility', 'state']].drop_duplicates()

# 2. 获取所有需要覆盖的月份(自动提取并排序)
all_months = pd.DataFrame({'month': df['month'].unique().sort()})

# 3. 交叉连接生成完整框架,补全固定的year列
full_df = unique_pairs.merge(all_months, how='cross')
full_df['year'] = 23

# 4. 调整列顺序并排序,匹配目标格式
full_df = full_df[['year', 'month', 'utility', 'state']].sort_values(by=['month', 'utility', 'state']).reset_index(drop=True)

print(full_df)

方法二:基于现有组合的MultiIndex重索引

如果更倾向用MultiIndex思路,可以基于原数据中已有的utility-state组合生成索引,避免产生无效组合:

import pandas as pd

# 原数据
df = pd.DataFrame({'year':[23,23,23,23,23,23], 'month':[1,1,1,2,3,3], 'utility':['A','A','B','A','A','B'], 'state':['NY','NJ','CA','NJ','NY','CA']})

# 1. 生成原数据中存在的utility-state多索引
pair_index = pd.MultiIndex.from_frame(df[['utility', 'state']].drop_duplicates())

# 2. 获取所有月份的索引
month_index = pd.Index(df['month'].unique().sort(), name='month')

# 3. 生成完整的多索引(year固定为23)
full_index = pd.MultiIndex.from_product(
    [[23], month_index, pair_index],
    names=['year', 'month', 'utility', 'state']
)

# 4. 重索引原数据并重置索引
full_df = df.set_index(['year', 'month', 'utility', 'state']).reindex(full_index).reset_index()

print(full_df)

两种方法都能得到目标结果,不会生成A-CA这类原数据中不存在的组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:05:46