Python 添加两个格式相似的数据帧时保持列顺序

Python 添加两个格式相似的数据帧时保持列顺序,python,excel,pandas,Python,Excel,Pandas,我有两个格式相似的数据帧。两者都有3个索引/标题。大多数头都是相同的,但df2有几个附加头。当我把它们加起来时,标题的顺序就混淆了。我想维持df1的订单。有什么想法吗 Global = pd.read_excel('Mickey Mouse_Clean2.xlsx',header=[0,1,2,3],index_col=[0,1],sheet_name = 'Global') Oslav = pd.read_excel('Mickey Mouse_Clean2.xlsx',header=[0,1

我有两个格式相似的数据帧。两者都有3个索引/标题。大多数头都是相同的,但df2有几个附加头。当我把它们加起来时,标题的顺序就混淆了。我想维持df1的订单。有什么想法吗

Global = pd.read_excel('Mickey Mouse_Clean2.xlsx',header=[0,1,2,3],index_col=[0,1],sheet_name = 'Global')
Oslav = pd.read_excel('Mickey Mouse_Clean2.xlsx',header=[0,1,2,3],index_col=[0,1],sheet_name = 'Country XYZ')

Oslav = Oslav.replace(to_replace=1,value=10)
Oslav = Oslav.replace(to_replace=-1,value=-2)

df = Global.add(Oslav,fill_value=0)
df格式示例

                 HeaderA      |        Header2     |        Header3      |
           xxx1|xxx2|xxx3|xxx4||xxx1|xxx2|xxx3|xxx4||xxx1|xxx2|xxx3|xxx4 |
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColDK|
1   | ds  | 1  |    |+1  |-1  | .......................................
2   | dh  |  ..........................................................
3   | ge  |  ..........................................................
4   | ew  |  ..........................................................
5   | er  |  ..........................................................

(第二个选项也应该保留
Oslav
列的顺序,如果您关心的话。)

如果不想保留
Oslav
中的列,但不想保留
Global
中的列,可以这样做

df = df[Global.columns].copy()

请注意,如果不使用
.copy()
,您将获得上一个数据帧的视图,而不是数据帧本身的视图。

向我们展示示例数据帧,这样我们就有了一个完整的视图。我们无法读取您的Excel文件。你可以,不包括链接或图片,只是文本。注意,你也可以发布示例数据框显示相同的行为,如果它是不实际的发布实际文件。如果你只是想重新排序列考虑使用<代码> df.ReXixx()<代码>,我想订购列标题0和列标题3。我可以使用
df.reindex()
吗?我现在得到了一个错误:TypeError:无法使用这个索引执行add类型:multiindex您以前没有得到这个错误吗?我希望我的答案是代码,供您在执行
add
后运行,因此我看不出它如何会在前面的语句中导致错误。我以前没有收到该错误。我想这是因为我的df有多个头?如果我运行
df=df[Global.columns].copy()
我只会得到全局标题的df。一旦我开始加法和减法得到全局+Oslav,我就得到上面的错误。这可能是因为多个标题吗?添加了一个dfs外观示例
df = df[Global.columns+[col for col in Oslav.columns if not col in Global.columns]].copy()
df = df.reindex(columns=Global.columns+list(set(Oslav.columns)-set(Global.columns)))
df = df[Global.columns].copy()