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

如何基于DataFrame中Seg列相邻'x'计算position差值并生成Seg ID

问题与解决方案

原始数据

给定如下Pandas DataFrame,其中position列存储字符串类型的数值,Seg列包含标记值'x'和缺失值NaN:

import numpy as np
import pandas as pd
mydict = {'position':['0.0', '0.433', '2.013', '3.593', '5.173', '6.753', '6.9'],'Seg':['x', 'x', np.nan, np.nan, np.nan, np.nan, 'x']}
df = pd.DataFrame.from_dict(mydict)

初始DataFrame展示:

positionSeg
0 0.0x
1 0.433x
2 2.013NaN
3 3.593NaN
4 5.173NaN
5 6.753NaN
6 6.9x

需求说明

需要基于Seg列中相邻的'x'标记,计算对应position列的数值差值生成diff列;同时生成对应的Seg ID列。要求Seg ID随'x'的分布动态变化,最终输出格式如下:

positionSegdiffSeg ID
0 0.0xNaNNaN
1 0.433x0.433Seg 1
2 2.013NaNNaNNaN
3 3.593NaNNaNNaN
4 5.173NaNNaNNaN
5 6.753NaNNaNNaN
6 6.9x6.467Seg 2

实现方法

以下是完整的实现代码,每一步操作都有注释说明:

# 1. 将position列转换为数值类型,方便后续计算
df['position'] = pd.to_numeric(df['position'])

# 2. 计算相邻x对应的position差值,生成diff列
x_mask = df['Seg'] == 'x'
# 先计算所有行的position差值,仅保留x行的结果,其余设为NaN
df['diff'] = np.where(x_mask, df['position'].diff(), np.nan)
# 第一行x没有前序x,将其diff设为NaN
df.loc[x_mask.cumsum() == 1, 'diff'] = np.nan

# 3. 生成Seg ID列,仅为有有效diff值的行分配编号
seg_counter = x_mask.cumsum()
# 为非NaN的diff行分配对应Seg ID,其余保持NaN
df['Seg ID'] = np.where(df['diff'].notna(), f"Seg {seg_counter - 1}", np.nan)
# 修正格式,确保编号为整数形式的字符串
df['Seg ID'] = df['Seg ID'].apply(lambda x: x if pd.isna(x) else f"Seg {int(x.split(' ')[1])}")

执行上述代码后,即可得到符合要求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:01:28