获取不同的列数据框

时间:2019-06-07 08:54:40

标签: python-3.x pandas dataframe outer-join distinct-values

你好我该怎么做,只在2个数据帧中val不同的行。 请注意,我可以同时具有id1或id2或两者都有。

d2 = {'id1': ['X22', 'X13',np.nan,'X02','X14'],'id2': ['Y1','Y2','Y3','Y4',np.nan],'VAL1':[1,0,2,3,0]}
F1 = pd.DataFrame(data=d2)
d2 = {'id1': ['X02', 'X13',np.nan,'X22','X14'],'id2': ['Y4','Y2','Y3','Y1','Y22'],'VAL2':[1,0,4,3,1]}
F2 = pd.DataFrame(data=d2)

预期产量

d2 = {'id1': ['X02',np.nan,'X22','X14'],'id2': ['Y4','Y3','Y1',np.nan],'VAL1':[3,2,1,0],'VAL2':[1,4,3,1]}

F3 = pd.DataFrame(data = d2)

1 个答案:

答案 0 :(得分:0)

首先使用left_onright_on参数合并所有列,然后过滤掉both行,并用stackunstack进行整形,从而删除缺失值:

df=pd.merge(F1, F2, left_on=['id1','id2','VAL2'], 
                    right_on=['id1','id2','VAL1'], how="outer", indicator=True)

df=(df[df['_merge'] !='both']
        .set_index(['id1','id2'])
        .drop('_merge', 1)
        .stack()
        .unstack()
        .reset_index())

print (df)
   id1 id2 VAL2 VAL1
0  X02  Y4    3    1
1  X22  Y1    1    3