【发布时间】:2021-08-14 00:23:00
【问题描述】:
我有一个如下所示的 pyspark 数据框:
| id | tmp_list | other features |
|---|---|---|
| 1 | ['Spain', 'Italy'] | xxx |
| 2 | ['Spain', 'France', 'USA', 'India'] | yyy |
| 3 | ['Spain', 'Germany'] | zzz |
以及如下国家列表:
EU_countries = ['Spain', 'Italy', 'France', 'Germany']
我想做以下事情:
- 从
tmp_list列中提取所有唯一值 - 为
EU_countries中存在的所有值创建新列。对于EU_countries中不存在的值,创建一个名为other_countries的列。本质上,为EU_countries列表中的每个条目创建列 + 一个名为other_countries的额外列。 - 如果
id包含EU_countries列表中的任何国家/地区,则新列Spain应具有1作为值否则0。同样适用于EU_countries列表中的其他国家/地区。 - 如果
id包含EU_countries列表中不存在的任何国家/地区,则应填写other_countries列1否则0。
这是我正在寻找的最终输出:
| id | Spain | Italy | France | Germany | other_countries | other features |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 0 | 0 | 0 | xxx |
| 2 | 1 | 0 | 1 | 0 | 1 | yyy |
| 3 | 1 | 0 | 0 | 1 | 0 | zzz |
我对此感到头疼。有人可以帮我解决这个问题吗?
非常感谢任何帮助!非常感谢!
【问题讨论】:
-
试试 pyspark ml 的 onehotencoder?
-
我认为它会创建不同的列表组合。我的意思是,
spain, italy将是一列,spain,france,USA, india将是另一列。