首页 > 解决方案 > 如何在 Python 中使用条件计算 For 循环内的 stdev

问题描述

我有一个 CSV 文件,分为两列:“Time.s”、“Volt.mv”。 示例:0、1.06 0.0039115、1.018 0.0078229、0.90804

所以,我必须返回超过阈值 0.95 的时间值,表示每个值相对于该时间间隔的平均值的偏差。

我这样计算平均值:

ecg_time_mean = ecg["Time.s"].mean()
print(ecg_time_mean)

然后,我尝试制作一个带有条件的 For 循环:

ecg_dev = []

for elem in ecg["Time.s"]:
    if elem > 0.95:
        deviation = ecg["Time.s"].std()
        sqrt = deviation**(1/2.0)
        dev = sqrt/ecg_time_mean
        ecg_dev.append(elem)

ecg["Deviation"] = dev
print(ecg)

我想在一个名为“偏差”的新列中打印输出。 这是输出: no If Condition 考虑和列 Deviation 在每行中具有相同的数字。

我无法理解这个问题。提前谢谢你们,伙计们!

标签: python

解决方案


  1. 您正在将“elem”而不是您的开发人员添加到新列中。
  2. 您没有将 ecg_dev 分配给您的新列;您为该列分配了一个 VALUE dev。
  3. 如果您注意到, dev 实际上在整个循环中是相同的值。计算dev的唯一变量是std和mean,它们包含整个数据,因此否定了任何循环。
  4. 并且 ecg_dev 的长度与您的 ecg 不同,因为它比您的 ecg 短(由于 if)。因此,即使您将其分配给新列,它也会失败。
  5. sqrt 在 ecg 中是固定的,您不需要在循环内重新计算它。

根据您在这里写的内容,我不明白您想要什么:

所以,我必须返回超过阈值 0.95 的时间值,表示每个值相对于该时间间隔的平均值的偏差。

  • 什么是Time.s?它是单调增加的时间还是间隔长度?如果它是单调增加的时间,“每个值相对于平均值的偏差”没有意义。如果它是一个间隔,那么“该时间间隔的平均值”没有意义。
  • 对于 Time.s > 0.95,您需要在时间间隔内,哪个(或列)相对于哪个列的平均值的偏差。

当您澄清这些以在占位符功能中找到时,我会修改我的答案。(问题已在评论中澄清)

看起来您想要 volt.mv 超过 0.95 的情况下所用时间与平均时间的偏差。在这种情况下,您根本不需要 std() 。

ecg_time_mean = ecg["Time.s"].mean()
ecg['TimeDeviationFromMean'] = ecg['Time.s'] - ecg_time_mean
ecg_above95 = ecg[ecg['Volt.mv'] > 0.95]

ecg_above95 数据框应该是您需要的。


推荐阅读