Python Databricks Koalas基于另一列值Lambda函数的列分配

Python Databricks Koalas基于另一列值Lambda函数的列分配,python,databricks,spark-koalas,Python,Databricks,Spark Koalas,给定考拉数据帧: 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 = 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

为什么这会为每个值指定“高”。其目的是对每一行进行操作,是不是要查看比较中的整个列?

对考拉df使用
assign
对我来说似乎不容易,但对于您的情况,我将
mul
列“high_risk”乘以2,然后
添加
列“Middle_risk”,最后
映射结果,以“high”替换2(因为之前将列乘以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,则此操作将失败。

是否必须使用
assign
,因为现在按您想要的方式使用它似乎很复杂?我考虑了一个解决方案,但不确定计算成本是否为非强制性,但是,我的理解是考拉不支持:df[“risk”]=df[]用于列分配。