对于列,获取特定上下文中第一次和最后一次出现的索引

2024-05-15 00:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

df

^{tb1}$

*=以后要填充的特殊值

我只计算y坐标值下降时的总距离。当它随后减小时,我只取最后一个索引,它将所有之前(继续)的距离相加(如所需结果列所示)

如果以后的距离相同,那么我想输入一些唯一的值,以便以后可以用一个值替换所有的距离

有数百万行要通过,所以for循环将花费太长时间。是否有一种不使用for循环的更快方法


Tags: 方法距离dffor花费tb1坐标值下降时
1条回答
网友
1楼 · 发布于 2024-05-15 00:17:07

让我们尝试cumsum识别连续严格递减值块:

# Δy
d = df['y position'].diff()

# Δy < 0
m = d.lt(0)

# identify blocks 
b = (~m).cumsum()

# group + transform
s = d.mask(~m).abs().groupby(b).transform('sum')

# select last values per group
df['result'] = np.select([~b.duplicated(keep='last') & m, d.eq(0)], [s, '*'], '')

详细信息:

y position上计算^{}

print(d)

0     NaN
1     1.0
2     1.0
3    -1.0
4    -1.0
5    -1.0
6     2.0
7     1.0
8    -1.0
9     3.0
10   -5.0
11    0.0
Name: y position, dtype: float64

使用^{}识别严格递减值的连续块:

print(b)

0     1
1     2
2     3
3     3
4     3
5     3
6     4
7     5
8     5
9     6
10    6
11    7
Name: y position, dtype: int64

^{}使用^{}连续块(b)和^{}上的连续差异:

print(s)

0     0.0
1     0.0
2     3.0
3     3.0
4     3.0
5     3.0
6     0.0
7     1.0
8     1.0
9     5.0
10    5.0
11    0.0
Name: y position, dtype: float64

然后使用带有条件和相应选项的^{},以便仅保持每个连续递减值块的最后总距离:

print(df)

    y position   result
0            1        
1            2        
2            3        
3            2        
4            1        
5            0     3.0
6            2        
7            3        
8            2     1.0
9            5        
10           0     5.0
11           0       *

相关问题 更多 >

    热门问题