当一行中某一列的值与另一行另一列中的值匹配时,如何匹配pyspark数据框中的两行?

时间:2019-08-13 19:40:08

标签: python dataframe apache-spark pyspark

我有一个如下的spark数据框。如果col2中的值在col1的其他行中找到,我想在新列的列表中获取col3的值。而且我宁愿不使用自我加入。

输入:

col1    col2    col3  
A       B       1  
B       C       2
B       A       3 

输出:

col1    col2    col3    col4
A       B       1       [2,3]  
B       C       2       []
B       A       3       [1] 

1 个答案:

答案 0 :(得分:1)

您需要使用groupby创建映射,然后使用merge

mapper = df.groupby('col1', as_index=False).agg({'col3': list}).rename(columns={'col3':'col4', 'col1': 'col2'})
df.merge(mapper, on='col2', how='left')

输出:

  col1  col2    col3    col4
0   A   B       1      [2, 3]
1   B   C       2      NaN
2   B   A       3      [1]