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

如何将DataFrame中差值为1的Series值统一为相同数值?

解决方案

思路

核心是将相邻差值绝对值≤1的连续数值划分为同一组,然后将组内所有值统一替换为该组的最大值(根据示例需求,选择统一为较大值;若要统一为较小值,可替换为min)。

代码实现

import pandas as pd

# 原始数据
df = pd.DataFrame()
df['yMax'] = [127, 300, 300, 322, 322, 322, 322, 344, 344, 344, 366, 366, 367, 367, 367, 388, 388, 388, 388, 389, 389, 402, 403, 403, 403]

# 1. 生成分组ID:当相邻差值绝对值>1时,开启新分组
group_ids = (abs(df['yMax'].diff()) > 1).cumsum()

# 2. 对每个分组取最大值,替换原列
df['yMax'] = df.groupby(group_ids)['yMax'].transform('max')

# 查看结果
print(df['yMax'].tolist())

输出结果

[127, 300, 300, 322, 322, 322, 322, 344, 344, 344, 367, 367, 367, 367, 367, 389, 389, 389, 389, 389, 389, 403, 403, 403, 403]

代码解释

  • abs(df['yMax'].diff()) > 1:判断相邻元素差值的绝对值是否大于1,生成布尔序列,True表示需要开启新分组。
  • .cumsum():对布尔序列累加,将连续的True/False转化为递增的分组ID,确保差值≤1的连续元素被分到同一组。
  • groupby(group_ids)['yMax'].transform('max'):按分组ID聚合,对每个分组取最大值,并将结果映射回原DataFrame的每一行,实现组内值的统一替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:46:01