我有两个系列和一个数据框,我想将它们全部合并在一起。
cola = pd.Series(['test','test1','test2','test3'], index=[0,0,1,1])
colb = pd.Series(['k','k1','k2','k3'], index=[0,1,1,2])
df = pd.DataFrame({'col1': ['z','z1','z2','z3']}, index=[0,0,0,1])
我同时尝试了merge
和concat
,但始终会出错。索引是这里的问题。我只想合并它们,如果一列与另一列没有相同的索引,则应该用NaN
填充它。有可能吗?
这是我想要的输出:
col1 colb cola
0 z k test
0 z1 NaN test1
0 z2 NaN NaN
1 z3 k1 test2
1 NaN k2 test3
2 NaN k3 NaN
有帮助吗?谢谢
答案 0 :(得分:2)
需要使用cumcount
为join
创建一个帮助键
df.set_index(df.groupby(df.index).cumcount(),append=True,inplace=True)
cola=cola.to_frame('cola').set_index(cola.groupby(cola.index).cumcount(),append=True)
colb=colb.to_frame('colb').set_index(colb.groupby(colb.index).cumcount(),append=True)
yourdf=df.join(cola,how='outer').join(colb,how='outer')
yourdf
Out[161]:
col1 cola colb
0 0 z test k
1 z1 test1 NaN
2 z2 NaN NaN
1 0 z3 test2 k1
1 NaN test3 k2
2 0 NaN NaN k3