python - 如何在 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 在每行中具有相同的数字。
我无法理解这个问题。提前谢谢你们,伙计们!
解决方案
- 您正在将“elem”而不是您的开发人员添加到新列中。
- 您没有将 ecg_dev 分配给您的新列;您为该列分配了一个 VALUE dev。
- 如果您注意到, dev 实际上在整个循环中是相同的值。计算dev的唯一变量是std和mean,它们包含整个数据,因此否定了任何循环。
- 并且 ecg_dev 的长度与您的 ecg 不同,因为它比您的 ecg 短(由于 if)。因此,即使您将其分配给新列,它也会失败。
- 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 数据框应该是您需要的。
推荐阅读
- javascript - 云函数的 TypeError
- javascript - 如何将按钮添加到嵌入页面 discord.js
- scilab - 如何用另一种语言编程 contr() scilab 函数
- go - 如何在 Golang 中将 keyUsage 添加到证书签名请求中
- javascript - 我想从用户输入的数字和生成的数字中找到匹配的数字并突出显示匹配项
- javascript - 如何禁用今天的日期和日期选择器默认是第二天
- php - 我在这段代码中的 for 循环上限为 10 任何想法为什么会这样?
- laravel - 如何解决 laravel 单元测试中对未定义方法 assertSessionHasErrors 的错误调用?
- python-3.x - 基于相同颜色的像素绘制多边形(矢量化)栅格——得到坏多边形
- .net - Azure B2C 返回错误持有者 error="invalid_token", error_description="签名无效