如何比较列中的值并使用pandas创建新列?

2024-10-02 20:31:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为value的df,大小为567,它有一个列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的新列添加到valuedf中,并且必须添加值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

Tags: andindfforindexifvalue错误
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:35

如果您有多个条件,则不希望在数据帧中循环并使用if, elif, else。更好的解决方案是使用^{}定义条件并根据这些条件定义选项:

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分钟的时间,here'sCS95将提供一篇很好的帖子,解释为什么在数据帧上循环是一种不好的做法

相关问题 更多 >