Используйте merge
с заменой 0
на fillna
, при необходимости sort_index
и trne транспонируйте на set_index
с T
:
#if need inner join
df3 = dfa.merge(df2,on='SN').fillna(0).sort_index().set_index('SN').T
#if need outer join
df3 = dfa.merge(df2,on='SN', how='outer').fillna(0).sort_index().set_index('SN').T
print (df3)
SN 456123 789456 123789
A_x 10.0 15.0 16.0
B_x 23.0 45.0 62.0
C_x 48.0 98.0 55.0
A_y 10.0 15.0 68.0
B_y 19.0 45.0 77.0
C_y 48.0 0.0 55.0
Другое решение с внешним соединением с concat
:
df3 = (pd.concat([df1.set_index('SN'),
df2.set_index('SN')], axis=1, keys=('x', 'y')).T.fillna(0))
#flatten MultiIndex
df3.index = [f'{j}_{i}' for i, j in df3.index]
print (df3)
SN 456123 789456 123789
A_x 10.0 15.0 16.0
B_x 23.0 45.0 62.0
C_x 48.0 98.0 55.0
A_y 10.0 15.0 68.0
B_y 19.0 45.0 77.0
C_y 48.0 0.0 55.0