Pandas多级索引缺失项补零:自动补全DataFrame缺失class索引项
解决Pandas v0.23.4多级索引缺失项补全问题
没问题,我来帮你搞定这个Pandas多级索引补全的问题,针对你用的v0.23.4版本,咱们可以用重新构建完整索引再对齐的方式来自动补全缺失的class项,具体操作如下:
首先,先把你提供的数据还原成可复现的DataFrame(方便你测试):
import pandas as pd # 构造示例数据 data = [ ('2019-04-30', 0, 324), ('2019-04-30', 1, 6874), ('2019-04-30', 2, 44), ('2019-04-30', 3, 5), ('2019-04-30', 4, 15), ('2019-05-31', 0, 393), ('2019-05-31', 1, 6534), ('2019-05-31', 2, 64), ('2019-05-31', 3, 1), ('2019-05-31', 4, 22), ('2019-06-30', 0, 325), ('2019-06-30', 1, 5899), ('2019-06-30', 2, 48), ('2019-06-30', 4, 7), ] df = pd.DataFrame(data, columns=['date', 'class', 'Col_values']) df = df.set_index(['date', 'class'])
接下来是核心的补全步骤:我们需要先构建一个包含所有日期和完整class(0-4)组合的多级索引,然后让原DataFrame对齐到这个完整索引,缺失的项自动填充为0:
# 获取所有唯一的日期 unique_dates = df.index.get_level_values('date').unique() # 定义完整的class范围(这里根据你的数据是0到4) full_classes = list(range(5)) # 等价于[0,1,2,3,4] # 生成日期和class的笛卡尔积,构建完整的多级索引 full_multi_index = pd.MultiIndex.from_product( [unique_dates, full_classes], names=['date', 'class'] ) # 重新索引并填充缺失值为0 df_filled = df.reindex(full_multi_index, fill_value=0)
执行完这段代码后,你可以查看2019-06-30的部分,就能看到class 3已经被补全,且Col_values为0:
print(df_filled.loc['2019-06-30'])
输出结果:
Col_values class 0 325 1 5899 2 48 3 0 4 7
补充说明
如果你的class范围不是固定的0-4,也可以从原DataFrame中提取所有已存在的class值来确保覆盖所有可能的类别,比如:
full_classes = df.index.get_level_values('class').unique().sort_values()
这样不管后续新增了哪些class,都能自动补全对应日期的缺失项。
内容的提问来源于stack exchange,提问作者La_haine
相关产品推荐
相关产品推荐

