[英]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.