我有一个这样的数据帧df1:
A B
AA [a,b,c,d]
BB [a,f,g,c]
CC [a,b,l,m]
另一个是df2,如:
C D
XX [a,b,c,n]
YY [a,m,r,s]
UU [e,h,I,j]
我想根据df2[‘D’]和df1[‘B’]项之间的最高元素匹配,找出df2的C列和df1的A列,如果没有,则映射为NULL.
结果df将如下所示:
C D A common_items
XX [a,b,c,n] AA [a,b,c]
YY [a,m,r,s] CC [a,m]
UU [e,h,I,j] Null Null
在花费大量时间研究了iterTools和np操作并使用pd.merge‘int’之后,我得到的最接近的结果是:
np.intersect1d(df2.D, df1.B)
keys = ['B', 'D']
intersection = df1.merge(df2[keys], on=keys)
关于不同数据帧的两列的公共元素的数目的任何解决方案,将源df1[‘A’]映射到目标df2[‘c’]. [a,b,c,d]等是字符串列表.
生效日期:
df1.to_dict('list'):
{'A': ['AA', 'BB', 'CC'],
'B': [['a', 'b', 'c', 'd'], ['a', 'f', 'g', 'c'], ['a', 'b', 'l', 'm']]}
df2.to_dict('list'):
{'C': ['XX', 'YY', 'UU'],
'D': [['a', 'b', 'c', 'n'], ['a', 'm', 'r', 's'], ['e', 'h', 'l', 'j']]}
任何关于spark 源/Pandas 的东西都会真的断断续续.