2017-07-27 12 views

回答

5

使用reindex_axis

pd.concat([A,B]).reindex_axis(B.columns, axis=1) 

輸出:

g N a e 
0 1 3 5 NaN 
1 2 4 6 NaN 
0 3 3 4 7.0 
1 4 9 1 8.0 
+1

謝謝,這解決了我的問題。我忽略提到合併多個數據幀,所以合併命令比這個重新索引操作更不方便。 – user1917407

+0

非常整潔的解決方案!這真的很難(如果可能的話)頂部 – MaxU

+0

@ MaxU,@ COLDSPEED ...感謝yall(德克薩斯人,你們所有人,你們的複數)。 –

2

合併時,指定sort=False

In [1251]: A.merge(B, how='outer', sort=False) 
Out[1251]: 
    g N a e 
0 1 3 5 NaN 
1 2 4 6 NaN 
2 3 3 4 7.0 
3 4 9 1 8.0 
1

下應該做的伎倆:pd.concat([a, b])[b.columns]

完整的測試代碼:

import pandas as pd 
from io import StringIO 

a = pd.read_csv(StringIO(""" 
g N a 
1 3 5 
2 4 6 
"""), sep=r"\s*") 

b = pd.read_csv(StringIO(""" 
g N a e 
3 3 4 7 
4 9 1 8 
"""), sep=r"\s*") 

pd.concat([a, b])[b.columns] 

這將產生:

g N a e 
0 1 3 5 NaN 
1 2 4 6 NaN 
0 3 3 4 7.0 
1 4 9 1 8.0 

您可能還需要重置索引:

pd.concat([a, b])[b.columns].reset_index(drop=True) 

...爲了刪除索引重複。這給出:

g N a e 
0 1 3 5 NaN 
1 2 4 6 NaN 
2 3 3 4 7.0 
3 4 9 1 8.0 
相關問題