PySpark 根据另一列的类别添加多列
PySpark add multiple columns based on categories from the other column
我有一个如下所示的数据集:
id | category | value
---+----------+------
1 | a | 3
2 | a | 3
3 | a | 3
3 | b | 1
4 | a | 1
4 | b | abc
我想要的输出是:
id | category_a | category_b
---+------------+--------
1 | 3 | null
2 | 3 | null
3 | 3 | 1
4 | 1 | abc
这意味着它将 groupBy
id, category
并创建虚拟列。
如何将输入转换为预期的输出?
我的做法是:
pivoted_df = df.groupBy("id") \
.pivot("category") \
.agg(F.lit(F.col("value")))
但是我得到了这个错误:
pyspark.sql.utils.AnalysisException: Aggregate expression required for pivot, but '`value`' did not appear in any aggregate function.;
更新: value
列也包含非数字值。
对于 category
列,每个 id
将有 2 行仅关于 2 个类别 a, b
。
df = df.groupBy('id').pivot('category').agg(F.first('value'))
我有一个如下所示的数据集:
id | category | value
---+----------+------
1 | a | 3
2 | a | 3
3 | a | 3
3 | b | 1
4 | a | 1
4 | b | abc
我想要的输出是:
id | category_a | category_b
---+------------+--------
1 | 3 | null
2 | 3 | null
3 | 3 | 1
4 | 1 | abc
这意味着它将 groupBy
id, category
并创建虚拟列。
如何将输入转换为预期的输出?
我的做法是:
pivoted_df = df.groupBy("id") \
.pivot("category") \
.agg(F.lit(F.col("value")))
但是我得到了这个错误:
pyspark.sql.utils.AnalysisException: Aggregate expression required for pivot, but '`value`' did not appear in any aggregate function.;
更新: value
列也包含非数字值。
对于 category
列,每个 id
将有 2 行仅关于 2 个类别 a, b
。
df = df.groupBy('id').pivot('category').agg(F.first('value'))