计算光谱内的簇

问题描述 投票:0回答:1

我有一个包含两个参数的数据框,

val1
val2

  • val1
    代表频谱中的一个点
  • val2
    该点测量的电平

现在我想用以下逻辑对该谱进行聚类:

  • val1
    与之前的值进行比较。如果
    previous_row >= 1.3 * val1 | previous_row <= 0.7 * val1
    它被认为是一个新的集群。

我不知道如何在不循环的情况下解决这个问题,并且由于现实世界的数据非常大(数百万行),性能至关重要。非常感谢任何帮助。

这是与 MWE 相关的可视化示例:

Example

MWE

import pandas as pd
import numpy as np

np.random.seed(3)

df = pd.DataFrame({
    "val1":np.arange(1,11)
    , "val2":np.random.randint(20, 50, 10)
})

df["desired_output"] = [1, 2, 2, 3, 4, 5, 5, 6, 6, 6]

   val1  val2  desired_output
0     1    30               1
1     2    44               2
2     3    45               2
3     4    23               3
4     5    44               4
5     6    28               5
6     7    20               5
7     8    41               6
8     9    49               6
9    10    39               6
pandas numpy
1个回答
0
投票

使用

shift
访问先前的值,计算掩码并使用
cumsum
:

prev = df['val2'].shift()
df['out'] = (prev.ge(df['val2']*1.3) | prev.le(df['val2']*0.7)).cumsum()

输出:

   val1  val2  desired_output  out
0     1    30               1    0
1     2    44               2    1
2     3    45               2    1
3     4    23               3    2
4     5    44               4    3
5     6    28               5    4
6     7    20               5    5
7     8    41               6    6
8     9    49               6    6
9    10    39               6    6
© www.soinside.com 2019 - 2024. All rights reserved.