You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:20:34