python—在sum中有条件地控制值

cgh8pdjw  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(338)

我有一个Dataframe,看起来像这样:

| id   | c1  | c2   | c3    |
|------|-----|------|-------|
| 1334 | 20  | 3565 | 0.005 |
| 1335 | 543 | 2100 | 0.205 |
``` `c3` 是通过做 `c1 / (c1 + c2)` 像这样:

agg = (
df1
.groupby('id')
.agg(
F.count('c1').alias('c1'),
F.count('c2').alias('c2')
)
).withColumn('c3',
F.col('c1') / (F.col('c1') + F.col('c2')))

我想有条件地改变我的 `.withColumn` 像这样:

if c1 < 50 then 0
if c2 > 1000 then 1000

所以对于 `id` 1334年,计算变成 `0 / (0 + 1000)` 以及 `id` 1335变成 `545 / (543 + 1000)` .
我试过用 `.when()` 但似乎不能得到正确的语法
qvtsj1bj

qvtsj1bj1#

你可以试试这个:

.withColumn(
    'c3',
    F.when(F.col('c1') < 50, 0).otherwise(F.col('c1')) / (
        F.when(F.col('c1') < 50, 0).otherwise(F.col('c1')) +
        F.when(F.col('c2') > 1000, 1000).otherwise(F.col('c2'))
    )
)

相关问题