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

Pandas实现按Stop列划分动态区间的Price最值计算

解决DataFrame区间分界点的最值计算问题

示例数据集

先构造符合需求的示例DataFrame:

import pandas as pd
import numpy as np

data = {
    'Price': [5, 20, 85, 30, 10, 45, 50, 15],
    'Stop': [15, np.nan, np.nan, 30, np.nan, np.nan, np.nan, 15],
    'Max': [np.nan] * 8,
    'Min': [np.nan] * 8
}
df = pd.DataFrame(data)

解决方案步骤

1. 生成区间分组标识

通过向前填充Stop列的空值,为每个区间内的行打上统一的分组标记:

df['group'] = df['Stop'].ffill()

2. 计算各区间的Price最值

按分组标识计算每个区间内Price的最大值和最小值:

group_stats = df.groupby('group')['Price'].agg(['max', 'min'])

3. 将最值映射到对应Stop行

把计算得到的最值合并回原DataFrame,仅填充Stop非空的行:

# 合并统计结果
df = df.merge(group_stats, left_on='group', right_index=True, how='left')
# 更新Max、Min列
df.loc[df['Stop'].notna(), ['Max', 'Min']] = df.loc[df['Stop'].notna(), ['max', 'min']]
# 清理临时列
df.drop(['group', 'max', 'min'], axis=1, inplace=True)

处理后结果

最终DataFrame如下:

Price  Stop   Max   Min
0      5  15.0  85.0   5.0
1     20   NaN   NaN   NaN
2     85   NaN   NaN   NaN
3     30  30.0  50.0  10.0
4     10   NaN   NaN   NaN
5     45   NaN   NaN   NaN
6     50   NaN   NaN   NaN
7     15  15.0  15.0  15.0

关键说明

  • ffill()方法确保每个区间内的所有行都继承当前的Stop分界点值,实现动态区间的分组。
  • 分组统计后通过merge匹配对应区间的最值,精准填充到Stop所在行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:48:20