我有一个dataframe
,其中一些数值存储在列“value”中,并伴随着它们各自的分类树(在本例中是警告级别),存储在其他列中(在我的例子中,“low”,“middle”,“high”):
value low middle high
0 179.69 17.42 88.87 239.85
1 2.58 17.81 93.37 236.58
2 1.21 0.05 0.01 0.91
3 1.66 0.20 0.32 4.57
4 3.54 0.04 0.04 0.71
5 5.97 0.16 0.17 2.55
6 5.39 0.86 1.62 9.01
7 1.20 0.03 0.01 0.31
8 3.19 0.08 0.01 0.45
9 0.02 0.03 0.01 0.10
10 3.98 0.18 0.05 0.83
11 134.51 78.63 136.86 478.27
12 254.53 83.73 146.33 486.65
13 15.36 86.07 13.74 185.16
14 85.10 86.12 13.74 185.16
15 15.12 1.37 6.09 30.12
我想知道每个值属于哪个类别(例如,第一个值是中,第二个值是低于,因为它比任何树都小,第三个值是高。。。你明白了)。以下是预期产出:
^{pr2}$到目前为止,我使用这个难看的过程,一行一行地“手动”检查,停止在第一个类别(从高到低),比当前值大:
df["category"]="below_low"
for i in df.index:
for cat in ["high","middle","low"]:
if df.loc[i,"value"]>df.loc[i,cat]:
df.loc[i,"category"]=cat
break
我知道pd.cut()
方法,但我只知道如何在预定义的泛型tresholds列表中使用它。有人能告诉我遗漏了什么吗?在
在其他宇宙中,你应该使用耶兹雷尔经典的矢量方法。然而,如果你对
apply
做事的方式感到好奇,那么,你可以您可以使用:
value
True
获取1
如果列
^{pr2}$high
、middle
和low
中的所有值都是False
,那么一定的正确性是必要的。我通过反转mask
和all
创建新列。在最后一次呼叫^{} :
^{3}$以多个^{} 为尖Paul H的解决方案:
相关问题 更多 >
编程相关推荐