我需要合并两个缺少很多值的df(np.nan,None和(null))。
t1= pd.DataFrame(np.array([[1,2,3],[4,5,99]]),columns=['a','b','c'])
t2= pd.DataFrame(np.array([[1,None,3,'hello'],[4,5,6,'moon']]),columns=['a','b','c','d'])
t = pd.merge(t1,t2,how='outer', on=["a","c"])
也就是说,数据帧是:
t1 =
a b c
0 1 2 3
1 4 5 99
t2 =
a b c d
0 1 None 3 hello
1 4 5 6 moon
我需要一个结果df,以便每次观察都获得一行,而不会丢失任何数据。
相反,我得到了一个新行,将“ None”保留为值。
在上面的示例中,我想要
t= pd.DataFrame(np.array([[1,2,3,'hello'],[4,5,99,'moon'],[4,5,6,'moon']]),columns=['a','b','c','d'])
也就是说,我想要:
t =
a b c d
0 1 2 3 hello
1 4 5 99 moon
2 4 5 6 moon
答案 0 :(得分:1)
对您来说这是一种特殊情况,但是您可以尝试:
t= pd.merge(t1, t2[['a', 'd']].dropna(), how='left', on='a').append(t2.dropna())
merge函数将t1用于您的左联接,append将追加t2的缺失行,从t2开始,您将仅将d列联接到其上,dropna()将下拉您的None行。