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

如何基于非均匀索引子集对Pandas DataFrame按区间取最大值重采样

按自定义左开右闭索引区间对DataFrame取最大值

问题场景

给定Pandas DataFrame和一组索引分界点selected_indexes,需要按左开右闭规则(即区间(a, b]保留终点b、排除起点a)划分索引区间,对每个区间内的col列取最大值,最终结果以区间终点作为索引。

示例数据

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({'col': [5, 0, 3, 3, 7, 9, 3, 5, 2, 4]}, index=range(10))
# 自定义索引分界点
selected_indexes = [0, 5, 6, 9]

解决方案

通过pd.cut将原索引映射到对应的区间标签(区间右端点),再分组取最大值即可实现需求:

# 构造区间边界:在分界点前添加负无穷,覆盖第一个分界点之前的索引
bins = [-float('inf')] + selected_indexes
# 用分界点作为每个区间的标签(即结果的索引)
labels = selected_indexes

# 为每个索引分配对应的区间标签
df['group'] = pd.cut(df.index, bins=bins, labels=labels, right=True)

# 按标签分组取最大值,整理结果格式
result = df.groupby('group')['col'].max().rename_axis(index=None).to_frame()

结果验证

运行上述代码后,result的输出与示例完全一致:

col
0    5
5    9
6    3
9    5

代码说明

  • pd.cut(..., right=True):指定区间为左开右闭,完美匹配需求中的规则;
  • bins = [-float('inf')] + selected_indexes:确保第一个分界点0之前的索引(仅索引0)被分到第一个区间(-inf, 0];
  • groupby('group').max():按区间标签分组后取最大值,最终通过rename_axis去掉分组索引的名称,保证结果格式符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 22:05:19