首页 > 解决方案 > 在python中计算全宽半最大值

问题描述

我正在尝试在 python 中自动化全角半最大值。我有一个包含 6 行(信号)的数据框。我可以一次只为一个信号做,但我想为数据帧中的所有信号做。到目前为止,我的代码如下所示:

首先,我导入并绘制数据框只是为了了解所有内容的外观,如下所示:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv("Values_S250_3_level_YS.csv")
plt.plot(df)

然后我制作一个列表,将数据框中的所有值打印到其中,如下所示:

listb = []      # to print all the values of dataframe in a list form
for name, values in df.iteritems():
    print('{name}: {value}'.format(name=name, value=values))
    listb.append(values)

到目前为止一切都很好。接下来,我想在 listb 中找到大于最大值一半的值,

xss = []        # to get a list of 
for x in range(len(listb)):
    for a in range(len(listb[x])):
        if listb[x][a] > max(listb[x])/2.0:
            xss.append(a)
    
print(xss)

现在这工作正常,但我遇到的问题是所有 6 行的所有结果都附加到一个列表(xss)中,因此

[32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92]

如何在我的 for 循环中创建 6 个不同的列表?一旦我有了它,我将能够找到 min(xss) 和 max(xss) 来找到差异,这对应于每行的全宽半最大值。

如果您想尝试,这里是 csv 文件的链接:

https://drive.google.com/file/d/1Doxzr4I7-baQptbBBct-FFQOMsMmy9In/view?usp=sharing

这是情节的样子

这是情节的样子

标签: pythonpython-3.xpandasdataframeautomation

解决方案


如果我理解正确,只需对您的代码进行最少的更改:

xss = []
for x in range(len(listb)):
    xss_current = []
    for a in range(len(listb[x])):
        if listb[x][a] > max(listb[x])/2.0:
            xss_current.append(a)
    xss.append(xss_current)

现在 xss 包含 6 个列表。


推荐阅读