我想知道‘位置’栏与‘x’栏相邻的‘SEG’栏的差值.

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)
df

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

怎样才能得到‘diff’和‘seg id’的区别呢?注:‘X’可以随机出现在任何行,‘Seg ID’也会相应改变.

   position  Seg   diff  Seg ID
0      0.0    x     NaN    NaN
1    0.433    x   0.433  Seg 1
2    2.013  NaN    NaN    NaN
3    3.593  NaN    NaN    NaN
4    5.173  NaN    NaN    NaN
5    6.753  NaN    NaN    NaN
6      6.9    x   6.467  Seg 2

推荐答案

首先将position中的字符串转换为浮点数Series.astype:

df['position'] = df['position'].astype(float)

通过掩码获得Series.diff%的差异-通过x进行比较:

m = df['Seg'].eq('x')
df.loc[m, 'diff'] = df.loc[m, 'position'].diff()

如果差值不是NaN乘以Series.cumsum,则创建计数器:

m1 = df['diff'].notna()
df.loc[m1, 'Seg ID'] = 'Seg ' + m1[m1].cumsum().astype(str)
print (df)
   position  Seg   diff Seg ID
0     0.000    x    NaN    NaN
1     0.433    x  0.433  Seg 1
2     2.013  NaN    NaN    NaN
3     3.593  NaN    NaN    NaN
4     5.173  NaN    NaN    NaN
5     6.753  NaN    NaN    NaN
6     6.900    x  6.467  Seg 2

不同的输入数据:

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, 'x', 'x']}
df = pd.DataFrame.from_dict(mydict)
print (df)
  position  Seg
0      0.0    x
1    0.433    x
2    2.013  NaN
3    3.593  NaN
4    5.173  NaN
5    6.753    x
6      6.9    x

df['position'] = df['position'].astype(float)
m = df['Seg'].eq('x')
df.loc[m, 'diff'] = df.loc[m, 'position'].diff()

m1 = df['diff'].notna()
df.loc[m1, 'Seg ID'] = 'Seg ' + m1[m1].cumsum().astype(str)

print (df)
   position  Seg   diff Seg ID
0     0.000    x    NaN    NaN
1     0.433    x  0.433  Seg 1
2     2.013  NaN    NaN    NaN
3     3.593  NaN    NaN    NaN
4     5.173  NaN    NaN    NaN
5     6.753    x  6.320  Seg 2
6     6.900    x  0.147  Seg 3

Python相关问答推荐

pandas MultiIndex是SQL复合索引的对应物吗?

Python中使用Delivercio进行多个请求

使用Python Great Expectations和python-oracledb

合并同名列,但一列为空,另一列包含值

添加包含中具有任何值的其他列的计数的列

Python会扔掉未使用的表情吗?

Python 3.12中的通用[T]类方法隐式类型检索

比较2 PD.数组的令人惊讶的结果

Pandas 滚动最接近的价值

难以在Manim中正确定位对象

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

使用miniconda创建环境的问题

如果值不存在,列表理解返回列表

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

对所有子图应用相同的轴格式

如何在图中标记平均点?

计算天数

Plotly Dash Creating Interactive Graph下拉列表

ConversationalRetrivalChain引发键错误

OpenCV轮廓.很难找到给定图像的所需轮廓