我有一个**“pyspark.sql.dataframe.DataFrame”**格式的示例 Dataframe :
| ID | SampleColumn1| SampleColumn2 | SampleColumn3|
|--- |--------------| ------------ | ------------ |
| 1 |sample Apple | sample Cherry | sample Lime |
| 2 |sample Cherry | sample lemon | sample Grape |
我想创建一个基于这个初始 Dataframe 的新 Dataframe 。如果列表中的一个值[Apple,Lime,Cherry]出现在行的任何列中,它将在新 Dataframe 中的列中显示为1。在这种情况下,输出应为:
listOfValues = ['Apple','Lime','Cherry']
| ID | Apple | Lime | Cherry |
| 1 | 1 | 1 | 1 |
| 2 | 0 | 0 | 1 |
我目前有以下使用正常Pandas:
keywords = ['Apple', 'Lime', 'Cherry']
tmp = (df.melt(ignore_index=False)
.value.str.extract(
f'({"|".join(keywords)})',
expand=False)
.dropna())
res = (pd.crosstab(index=tmp.index, columns=tmp)
.rename_axis(index=None, columns=None))
我想实现这个输出,但是我想使用PySpark,因为当前的平台不允许使用Pandas或普通的Python命令。
1条答案
按热度按时间rkue9o1l1#
连接所有列,遍历每个关键字,并检查它是否存在于新的连接列中。这将给出
True
&False
。如果您对1
&0
感兴趣,则使用when()& otherwise()。