3

给定一个考拉数据框:

df = ks.DataFrame({"high_risk": [0, 1, 0, 1, 1], 
                   "medium_risk": [1, 0, 0, 0, 0]
                   })

运行 lambda 函数以根据现有列值获取新列:

df = df.assign(risk=lambda x: "High" if x.high_risk else ("Medium" if x.medium_risk else "Low"))
df
Out[72]: 
   high_risk  medium_risk  risk
0          0            1  High
4          1            0  High
1          1            0  High
2          0            0  High
3          1            0  High

预期收益:

       high_risk  medium_risk  risk
    0          0            1  Medium
    4          1            0  High
    1          1            0  High
    2          0            0  Low
    3          1            0  High

为什么这会将“高”分配给每个值。目的是对每一行进行操作,是否在比较中查看整列?

4

1 回答 1

1

在考拉 df 上使用assign对我来说似乎并不容易,但对于你的情况,我会将mul列“high_risk”乘以 2,然后add将列“medium_risk”,最后map将结果替换为“high”(因为你将列乘以2 之前)1 为“中”,0 为“低”,例如:

df = df.assign(risk= df.high_risk.mul(2).add(df.medium_risk)
                       .map({0:'low', 1:'medium', 2:'high'}))
df
   high_risk  medium_risk    risk
0          0            1  medium
1          1            0    high
2          0            0     low
3          1            0    high
4          1            0    high

注意:如果您在高风险和中等风险栏中都有 1,这将失败。

于 2019-10-11T15:57:53.133 回答