如何基于步进值4在Pandas序列的点间插入等距中间数值
在Pandas序列相邻元素间插入近似指定步进的等距中间值
需求说明
给定原始Pandas序列:
import pandas as pd original_series = pd.Series([19.280, 48.380, 51.240, 58.603, 60.380, 203.300])
需要在每两个相邻数值之间插入等距中间值,使中间值的增量尽可能接近步进值4,处理后序列开头如下:
pd.Series([19.280, 23.437, 27.594, 31.751, 35.909, 40.066, 44.223, 48.380, 51.240, 54.921, 58.603, 60.380, ...])
实现方案
通过遍历相邻元素对,计算合适的插入数量与实际步长,生成等距序列后拼接即可实现:
import pandas as pd import numpy as np def insert_approx_step(series, target_step=4): result = [] # 遍历每一对相邻元素 for i in range(len(series)-1): start = series.iloc[i] end = series.iloc[i+1] diff = end - start # 计算需要插入的中间值对应的间隔数(取差值与目标步进商的整数部分) num_intervals = int(np.floor(diff / target_step)) # 差值小于目标步进时,直接保留首尾 if num_intervals == 0: result.extend([start, end]) continue # 计算实际等距步长 actual_step = diff / num_intervals # 生成从start到end的等距序列(包含start,最后追加end避免遗漏) temp = np.arange(start, end, actual_step).tolist() temp.append(end) result.extend(temp) # 处理最后一个元素的边界情况 if not result or result[-1] != series.iloc[-1]: result.append(series.iloc[-1]) return pd.Series(result) # 测试示例 original_series = pd.Series([19.280, 48.380, 51.240, 58.603, 60.380, 203.300]) processed_series = insert_approx_step(original_series) print(processed_series.head(12))
代码说明
- 遍历原始序列的相邻元素对,计算两者差值
- 根据差值与目标步进的比值确定间隔数,保证实际步长尽可能接近目标值4
- 用
np.arange生成等距序列,拼接后转换为Pandas Series - 处理边界场景:当相邻元素差值小于目标步长时,直接保留原元素
输出验证
运行代码后,开头部分输出与需求示例一致:
0 19.280 1 23.437 2 27.594 3 31.751 4 35.908 5 40.065 6 44.222 7 48.380 8 51.240 9 54.921 10 58.603 11 60.380 dtype: float64
内容的提问来源于stack exchange,提问作者Maxime
相关产品推荐
相关产品推荐

