python - 如何比较列中的值并使用熊猫创建新列?
问题描述
我有一个名为value
567 的 df,它有一列index
如下:
index
96.875
96.6796875
96.58203125
96.38671875
95.80078125
94.7265625
94.62890625
94.3359375
58.88671875
58.7890625
58.69140625
58.59375
58.49609375
58.3984375
58.30078125
58.203125
我还有两个额外的变量:
mu
= 56.80877955613938
sigma
= 17.78935620293665
我想要的是检查index
列中的值。如果该值大于,例如,则必须将mu+3*sigma
名为 的新列alarm
添加到value
df 中,并且必须添加值 4。
我试过:
for i in value['index']:
if (i >= mu+3*sigma):
value['alarm'] = 4
elif ((i < mu+3*sigma) and (i >= mu+2*sigma)):
value['alarm'] = 3
elif((i < mu+2*sigma) and (i >= mu+sigma)):
value['alarm'] = 2
elif ((i < mu+sigma) and (i >= mu)):
value['alarm'] = 1
但它会创建一个alarm
列并用 1 完全填充它。
我在这里做错了什么?
预期输出:
index alarm
96.875 3
96.6796875 3
96.58203125 3
96.38671875 3
95.80078125 3
94.7265625 3
94.62890625 3
94.3359375 3
58.88671875 1
58.7890625 1
58.69140625 1
58.59375 1
58.49609375 1
58.3984375 1
58.30078125 1
58.203125 1
解决方案
如果您有多个条件,则不希望遍历数据框并使用if, elif, else
. 更好的解决方案是np.select
在我们定义条件的地方使用,并根据这些条件定义选择:
conditions=[
value['index'] >= mu+3*sigma,
(value['index'] < mu+3*sigma) & (value['index'] >= mu+2*sigma),
(value['index'] < mu+2*sigma) & (value['index'] >= mu+sigma),
]
choices = [4, 3, 2]
value['alarm'] = np.select(conditions, choices, default=1)
value
alarm
index
96.875000 3
96.679688 3
96.582031 3
96.386719 3
95.800781 3
94.726562 3
94.628906 3
94.335938 3
58.886719 1
58.789062 1
58.691406 1
58.593750 1
58.496094 1
58.398438 1
58.300781 1
58.203125 1
如果你有 10 分钟的时间,这是CS95 的一篇好文章,解释了为什么循环遍历数据帧是不好的做法。
推荐阅读
- python - 读取 yahoofinancials JSON 时出错:解码“NaN”时发现意外字符
- python - Python - 如何将 OpenMenu 选项分配为列表?
- javascript - 基于设置格式的两个日期之间的差异
- c++ - 使用 {fmt} 引用字符串
- node.js - 请求 client.guilds 给出未定义
- c# - 1 控件,两个独立的绑定源
- fortran - 我在哪里(网站)可以找到“libcaf_mpi.a”?
- python - Flask 变量未显示在 HTML 页面上
- xml - 如何在 Lazarus/Free Pascal 的 DBGrid 中加载 XML/CSV/ODB 文件?
- javascript - 如何隐藏mongodb中除第一个之外的重复数据?