考慮dataframes如何合併兩個不同大小的數據幀並保留其列順序?
答:
g N a
1 3 5
2 4 6
和B:
g N a e
3 3 4 7
4 9 1 8
是否有某種方式合併這使得所得的數據幀是:
g N a e
1 3 5 NaN
2 4 6 NaN
3 3 4 7
4 9 1 8
在換句話說,有什麼方法可以保留列順序而不是重新排序字典順序?
考慮dataframes如何合併兩個不同大小的數據幀並保留其列順序?
答:
g N a
1 3 5
2 4 6
和B:
g N a e
3 3 4 7
4 9 1 8
是否有某種方式合併這使得所得的數據幀是:
g N a e
1 3 5 NaN
2 4 6 NaN
3 3 4 7
4 9 1 8
在換句話說,有什麼方法可以保留列順序而不是重新排序字典順序?
使用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
合併時,指定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
下應該做的伎倆: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
謝謝,這解決了我的問題。我忽略提到合併多個數據幀,所以合併命令比這個重新索引操作更不方便。 – user1917407
非常整潔的解決方案!這真的很難(如果可能的話)頂部 – MaxU
@ MaxU,@ COLDSPEED ...感謝yall(德克薩斯人,你們所有人,你們的複數)。 –