如何用Pandas/PySpark实现替代get_dummies的自定义编码(显示状态色)
Pandas 实现方案
使用pivot_table可以直接满足需求,它能按指定列分组,并将A列的取值转为新列,填充对应的status_color值:
import pandas as pd # 构造示例数据集 data = { 'A': ['X1', 'X2', 'X3', 'X4'], 'B': ['a', 'a', 'a', 'a'], 'C': ['b', 'a', 'a', 'b'], 'D': ['c', 'b', 'b', 'c'], 'status_color': ['red', 'green', 'red', 'green'] } df = pd.DataFrame(data) # 执行 pivot 操作 result = df.pivot_table( index=['B', 'C', 'D'], # 分组列 columns='A', # 转为新列的字段 values='status_color', # 填充的字段值 fill_value=0 # 缺失值填充为0 ).reset_index() # 移除列索引的名称,让输出更简洁 result.columns.name = None print(result)
输出结果:
B C D X1 X2 X3 X4 0 a a b 0 green red 0 1 a b c red 0 0 green
PySpark 实现方案
在 PySpark 中使用groupBy+pivot组合实现同样逻辑:
from pyspark.sql import SparkSession from pyspark.sql.functions import first # 初始化 SparkSession spark = SparkSession.builder.appName("status_pivot").getOrCreate() # 构造示例数据集 data = [ ("X1", "a", "b", "c", "red"), ("X2", "a", "a", "b", "green"), ("X3", "a", "a", "b", "red"), ("X4", "a", "b", "c", "green") ] columns = ["A", "B", "C", "D", "status_color"] df = spark.createDataFrame(data, columns) # 分组并 pivot result = df.groupBy("B", "C", "D") \ .pivot("A") \ .agg(first("status_color")) \ .fillna(0) # 缺失值填充为0 result.show()
输出结果:
+---+---+---+----+-----+----+-----+ | B| C| D| X1| X2| X3| X4| +---+---+---+----+-----+----+-----+ | a| a| b| 0|green| red| 0| | a| b| c| red| 0| 0|green| +---+---+---+----+-----+----+-----+
说明
你之前尝试的duplicated仅用于标记重复分组,get_dummies只能生成0/1的哑变量,无法关联status_color的实际值。而pivot(或pivot_table)正是为这种"列转行并填充对应值"的场景设计的,直接完成分组、列转换和值填充的全流程。
内容的提问来源于stack exchange,提问作者buddingprogrammer
相关产品推荐
相关产品推荐

