gpt4 book ai didi

python - 将多列从行旋转到列

转载 作者:行者123 更新时间:2023-12-04 03:51:48 26 4
gpt4 key购买 nike

我有一个如下所示的 PySpark 数据框:

| id   | name   | policy     | payment_name | count |
|------|--------|------------|--------------|-------|
| 2 | two | 0 | Hybrid | 58 |
| 2 | two | 1 | Hybrid | 2 |
| 5 | five | 1 | Excl | 13 |
| 5 | five | 0 | Excl | 70 |
| 5 | five | 0 | Agen | 811 |
| 5 | five | 1 | Agen | 279 |
| 5 | five | 1 | Hybrid | 600 |
| 5 | five | 0 | Hybrid | 2819 |

我想让 policypayment_name 的组合成为具有相应计数的列(每个 id 减少到一行).

输出看起来像这样:

| id | name | no_policy_hybrid | no_policy_excl | no_policy_agen | policy_hybrid | policy_excl | policy_agen |
|----|------|------------------|----------------|----------------|---------------|-------------|-------------|
| 2 | two | 58 | 0 | 0 | 2 | 0 | 0 |
| 5 | five | 2819 | 70 | 811 | 600 | 13 | 279 |

在没有组合的情况下,我们可以将其默认为 0,即 id 2 没有包含 payment_name Excl 的组合,因此在示例输出中将其设置为 0。

最佳答案

要对表格进行透视,您首先需要一个分组列来组合 policypayment_name

df = df.withColumn("groupingCol", udf("{}_{}".format)("policy", "payment_name"))

当你拥有它时,你可以按 id 和 name` 列分组并旋转分组列。

df.groupBy("id", "name").pivot("groupingCol").agg(F.max("count"))

这应该会返回正确的表格列。

+---+----+------+------+--------+------+------+--------+
| id|name|0_Agen|0_Excl|0_Hybrid|1_Agen|1_Excl|1_Hybrid|
+---+----+------+------+--------+------+------+--------+
| 5|five| 811| 70| 2819| 279| 13| 600|
| 2| two| null| null| 58| null| null| 2|
+---+----+------+------+--------+------+------+--------+

要获得与示例中相同的列名,您可以首先将政策列的内容更改为 policyno_policy,如下所示:

df = df.withColumn("policy", when(col("policy") == 1, "policy").otherwise("no_policy"))

这是用 0 替换缺失值的方法:

df.na.fill(0)

关于python - 将多列从行旋转到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64353811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com