考虑数据帧
A:
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
换句话说,是否有某种方法可以保留列顺序而不是按字典顺序重新排序?
答案 0 :(得分: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 :(得分: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
答案 2 :(得分: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