簡體   English   中英

PySpark get_dummies 等效

[英]PySpark get_dummies equivalent

我有一個 pyspark dataframe 具有以下架構:

鍵1 鍵2 鍵3 價值
一個 一個 一個 “價值1”
一個 一個 一個 “價值2”
一個 一個 b “價值1”
b b 一個 “價值2”

(在現實生活中,這個 dataframe 非常大,轉換為 pandas DF 是不合理的)

我的目標是將 dataframe 轉換為如下所示:

鍵1 鍵2 鍵3 價值1 價值2
一個 一個 一個 1 1
一個 一個 b 1 0
b b 一個 0 1

I know this is possible in pandas using the get_dummies function and I have also seen that there is some sort of pyspark & pandas hybrid function that I am not sure I can use.

值得一提的是, Value列只能接收(在此示例中)值"value1""value2"我遇到過這個問題,可能解決了我的問題,但我不完全理解它,想知道是否有更簡單的方法解決問題。
任何幫助是極大的贊賞

小編輯

在實施公認的解決方案后,為了將其轉換為單熱編碼而不僅僅是外觀的總和,我將每一列轉換為 boolean 類型,然后再轉換回 integer。

這可以通過兩次分組來實現。

df = df.groupby(*df.columns).agg(F.count('*').alias('cnt')) \
    .groupby('Key1', 'Key2', 'Key3').pivot('Value').agg(F.sum('cnt')).fillna(0)
df.show(truncate=False)

# +----+----+----+------+------+
# |Key1|Key2|Key3|value1|value2|
# +----+----+----+------+------+
# |a   |a   |b   |1     |0     |
# |b   |b   |a   |0     |1     |
# |a   |a   |a   |1     |1     |
# +----+----+----+------+------+

您可以在計算所有記錄時對鍵列和 pivot 值列進行分組。

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|
# +----+----+----+------+------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM