我有一个pyspark数据帧,具有以下模式:

Key1 Key2 Key3 Value
a a a "value1"
a a a "value2"
a a b "value1"
b b a "value2"

(在现实生活中,此数据帧非常大,无法转换为数据帧)

我的目标是将数据帧转换为这样:

Key1 Key2 Key3 value1 value2
a a a 1 1
a a b 1 0
b b a 0 1

我知道这在使用get_dummies函数的Pandas 中是可能的,我也看到了一些pyspark&Pandas hybrid function,我不确定我能用

值得一提的是,列Value只能接收(在本例中)值"value1""value2"

SMALL EDIT

在实现了公认的解决方案之后,为了将其转换为一个热编码,而不仅仅是外观的总和,我将每个列转换为布尔类型,然后返回整数.

推荐答案

您可以按键列分组,并在计算所有记录时透视值列.

data_sdf. \
    groupBy('key1', 'key2', 'key3'). \
    pivot('val'). \
    agg(func.count('*')). \
    fillna(0). \
    show()

# +----+----+----+------+------+
# |key1|key2|key3|value1|value2|
# +----+----+----+------+------+
# |   b|   b|   a|     0|     1|
# |   a|   a|   a|     1|     1|
# |   a|   a|   b|     1|     0|
# +----+----+----+------+------+

Python相关问答推荐

Python在通过Inbox调用时给出不同的响应

FastAPI:使用APIRouter路由子模块功能

来自ARIMA结果的模型方程

socket.gaierror:[Errno -2]名称或服务未知|Firebase x Raspberry Pi

如何观察cv2.erode()的中间过程?

symy.分段使用numpy数组

如何让我的Tkinter应用程序适合整个窗口,无论大小如何?

添加包含中具有任何值的其他列的计数的列

Python:在类对象内的字典中更改所有键的索引,而不是仅更改一个键

通过优化空间在Python中的饼图中添加标签

try 与gemini-pro进行多轮聊天时出错

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

按列分区,按另一列排序

优化pytorch函数以消除for循环

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

启用/禁用shiny 的自动重新加载

合并帧,但不按合并键排序

旋转多边形而不改变内部空间关系

Polars将相同的自定义函数应用于组中的多个列,

Flask Jinja2如果语句总是计算为false&