首页 > 解决方案 > 是否有一种非循环方式来查找范围内的值,然后从列表中附加数据?

问题描述

我正在做一个项目,我根据某些值创建了垃圾箱。我会有 2 个值列表xy. 例如:如果我选择 1 的 bin 大小,我将创建一个带有 values 的[100, 102, 104, 106]binlist 。对于每个 bin,我想查找一个值是否介于两者之间并附加相应的值。如果一个值不在此范围内,我想分配一个值 0。这两个列表会这样。和。[2600, 18000, 12000, 4000][100, 101, 102, 103, 104, 105, 106]xyxx = [100, 101, 102, 103, 104, 105, 106]y = [2600, 0, 18000, 0, 1200, 0, 4000]

目前,我使用当前代码使用 for 循环来检查所有这些x值的所有 bin,如下所示:

spectrumcounter = 0
binintensitylist = [[] for x in range(len(intensitylist))]
for i in range(len(intensitylist)):
    for bin1 in bins:
        intensity_tmp = 0
        for mz,intensity in zip(mzlist[spectrumcounter],intensitylist[spectrumcounter]):
            if bin1 < mz < bin1 + binwidth:
                intensity_tmp += intensity
        binintensitylist[i].append(intensity_tmp)
    spectrumcounter += 1

这里的x值是值mz,强度是y值。考虑到我目前使用的 bin 大小为 0,01 并且mz's 的范围从 100 到有时 1600,bin 的数量可能非常大,这使得使用 for 循环的代码非常慢。我一直在尝试寻找一种解决此问题的 pandas 方法,但我对编码还很陌生,并且自己无法弄清楚这一点。

标签: pythonpandascompare

解决方案


推荐阅读