对pandas数据框架中特定条件下的值进行分类



我有这个数据框架:

value  limit_1  limit_2   limit_3  limit_4    
10      2        3         7        10        
11      5        6         11       13        
2      0.3      0.9        2.01     2.99   

我想添加另一列class,它以这种方式对value列进行分类:

if value <= limit1.value then 1
if value > limit1.value and <= limit2.value then 2
if value > limit2.value and <= limit3.value then 3
if value > limit3.value then 4

得到这个结果:

value  limit_1  limit_2   limit_3  limit_4    CLASS
10      2        3         7        10        4
11      5        6         11       13        3
2      0.3      0.9        2.01     2.99      3

我知道我可以让这些'if's工作,但我的数据框架有2kk行,我需要快速的方式来执行这样的分类。

我尝试使用。cut函数,但结果不是我所期望的/想要的

感谢

我们可以在列轴(axis=1)上使用rank方法:

df["CLASS"] = df.rank(axis=1, method="first").iloc[:, 0].astype(int)
value  limit_1  limit_2  limit_3  limi_4  CLASS
0     10      2.0      3.0     7.00   10.00      4
1     11      5.0      6.0    11.00   13.00      3
2      2      0.3      0.9     2.01    2.99      3

我们可以使用np.select:

import numpy as np
conditions = [df["value"]<df["limit_1"], 
df["value"].between(df["limit_1"], df["limit_2"]), 
df["value"].between(df["limit_2"], df["limit_3"]),
df["value"]>df["limit_3"]]
df["CLASS"] = np.select(conditions, [1,2,3,4])
>>> df
value  limit_1  limit_2  limit_3  limit_4  CLASS
0     10      2.0      3.0     7.00    10.00      4
1     11      5.0      6.0    11.00    13.00      3
2      2      0.3      0.9     2.01     2.99      3

最新更新