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

为多层索引DataFrame补全C索引层级缺失值以实现连续折线图

补全MultiIndex并绘制连续折线图

步骤1:补全C索引的所有取值

首先生成包含所有C取值的完整MultiIndex,再用它重新对齐分组后的数据,自动填充缺失值为NaN:

import pandas as pd

# 原始数据
df = pd.DataFrame({'A': [1, 2], 'B':['x', 'y'], 'C':[1, 2], 'D':[0, 0]})
# 分组聚合
grouped = df.groupby(['A', 'B', 'C']).mean()

# 获取C的所有唯一取值
all_c_values = df['C'].unique()
# 获取A和B的所有组合
ab_combinations = grouped.index.droplevel('C').unique()

# 生成完整的MultiIndex:所有A-B组合 × 所有C取值
full_multi_index = pd.MultiIndex.from_product(
    [ab_combinations.get_level_values('A'),
     ab_combinations.get_level_values('B'),
     all_c_values],
    names=['A', 'B', 'C']
)

# 重新索引,补全缺失的C取值
filled_df = grouped.reindex(full_multi_index)

执行后得到的filled_df即为目标结果:

D
A B C       
1 x 1    0.0
    2    NaN
2 y 1    NaN
    2    0.0

步骤2:绘制连续折线图

默认包含NaN的折线会断开,通过插值填充缺失值可让折线保持连续:

import matplotlib.pyplot as plt

# 转换为宽格式,方便按A-B组合绘制折线图
wide_df = filled_df['D'].unstack(['A', 'B'])

# 线性插值填充缺失值,保证折线连续
interpolated_df = wide_df.interpolate(method='linear')

# 绘制折线图
interpolated_df.plot(kind='line', xlabel='C', ylabel='D', marker='o')
plt.title('连续折线图:D vs C')
plt.show()

若仅需直接连接前后有效数据、无需填充值,也可直接使用wide_df绘图,部分版本的pandas plot会自动跳过NaN点完成连线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:25:36