我有一个如下的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]
答案 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]