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

时间:2018-08-17 16:55:59

标签: 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,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  |  ..........................................................

1 个答案:

答案 0 :(得分:0)

df = df[Global.columns+list(set(Oslav.columns)-set(Global.columns))].copy()

df = df[Global.columns+[col for col in Oslav.columns if not col in Global.columns]].copy()

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

df = df.reindex(columns=Global.columns+list(set(Oslav.columns)-set(Global.columns)))

如果您不想保留Oslav中的列,但不想保留Global中的列,则可以

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

请注意,如果没有.copy(),您将获得前一个数据框的视图,而不是本身的数据框。