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

Pandas多索引重采样:如何保留其他索引信息?

Pandas多级索引下的重采样解决方案

场景一:按天重采样并求和

原始DataFrame

value
A   B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6

预期结果

value
A   B
111 2024-03-22 00:00:00 6
222 2024-03-22 00:00:00 15

实现代码

直接使用resample(level='B')会丢失非时间索引A,正确做法是先按索引A分组,再对每个组的时间索引B执行重采样操作,保留完整多级索引结构:

df.groupby(level='A').resample(level='B', freq='D').sum()

场景二:按小时重采样并补全缺失时间点(填充0)

原始DataFrame

value
A   B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6
333 2024-03-22 05:00:00 7

预期结果

value
A   B
111 2024-03-22 00:00:00 1
111 2024-03-22 01:00:00 2
111 2024-03-22 02:00:00 3
111 2024-03-22 03:00:00 0
111 2024-03-22 04:00:00 0
111 2024-03-22 05:00:00 0
222 2024-03-22 00:00:00 4
222 2024-03-22 01:00:00 5
222 2024-03-22 02:00:00 6
222 2024-03-22 03:00:00 0
222 2024-03-22 04:00:00 0
222 2024-03-22 05:00:00 0
333 2024-03-22 00:00:00 0
333 2024-03-22 01:00:00 0
333 2024-03-22 02:00:00 0
333 2024-03-22 03:00:00 0
333 2024-03-22 04:00:00 0
333 2024-03-22 05:00:00 7

实现代码

先构造包含所有A值和完整小时时间序列的多级索引,再通过reindex补全缺失项并填充0:

# 获取全局时间范围的完整小时序列
full_time = pd.date_range(
    start=df.index.get_level_values('B').min().floor('H'),
    end=df.index.get_level_values('B').max().floor('H'),
    freq='H'
)
# 获取所有唯一的A值
unique_A = df.index.get_level_values('A').unique()
# 构造完整的目标多级索引
full_index = pd.MultiIndex.from_product([unique_A, full_time], names=['A', 'B'])
# 重采样补全并填充0
result = df.reindex(full_index, fill_value=0)

Pandas版本:2.0.1


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:49:54