pandas计算Series中连续1值批次起始点之间的索引距离
计算pandas Series中连续1值块起始点间距
核心实现逻辑非常直接:你需要的「1值块+后续0值块总长度」本质就是前后两个连续1值块起始位置的索引差值,不需要分别统计连续1和连续0的长度,直接定位所有1值块的起始点后计算相邻索引差即可。
完整实现代码
import pandas as pd import numpy as np # 原始Series s = pd.Series([0,0, 1,1,1,0,0, 1,1,0, 1,1,1,0,0,0,0, 1,1,1,0,0,0, 1,1,0,0]) # 1. 标记所有1值块的起始位置:当前值为1,且前一个值不为1 start_mask = (s == 1) & (s.shift(fill_value=0) != 1) # 2. 提取所有1值块的起始索引 start_points = s[start_mask].index # 3. 计算相邻起始点的差值,后移一位对齐 gap_values = start_points.to_series().diff().shift(-1).dropna().values # 4. 首尾补NaN,得到最终结果 res = pd.Series(np.concatenate([[np.nan], gap_values, [np.nan]])) print(res)
输出结果
运行上述代码得到的输出和预期完全一致:
0 NaN 1 5.0 2 3.0 3 7.0 4 6.0 5 NaN dtype: float64
内容的提问来源于stack exchange,提问作者matthme
相关产品推荐
相关产品推荐

