使用multiindex附加两个数据框

时间:2019-08-08 19:31:51

标签: python pandas

我有两个数据框,每个数据框都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或合并时,我希望熊猫将索引对齐,就像它在追加之前对齐无索引的列一样。是否可以传递一个函数或参数来附加或连接,以使其按我希望的方式工作(我认为应该是标准的)?

import pandas as pd

df1 = pd.DataFrame(data = {'Name':['Bob','Ann','Sally'], 'Acct':['Savings','Savings','Checking'], 'Value':[101,102,103]})
df1 = df1.set_index(['Name','Acct'])
print(df1)

df2 = pd.DataFrame(data = {'Acct':['Savings','Savings','Checking'], 'Name':['Bob','Ann','Sally'], 'Value':[201,202,203]})
df2 = df2.set_index(['Acct','Name'])
print(df2)

print(df1.append(df2))
print(pd.concat([df1,df2]))


               Value
Name  Acct
Bob   Savings     101
Ann   Savings     102
Sally Checking    103

                Value
Acct     Name
Savings  Bob      201
         Ann      202
Checking Sally    203

                   Value
Name     Acct
Bob      Savings     101
Ann      Savings     102
Sally    Checking    103
Savings  Bob         201
         Ann         202
Checking Sally       203

                   Value
Name     Acct
Bob      Savings     101
Ann      Savings     102
Sally    Checking    103
Savings  Bob         201
         Ann         202
Checking Sally       203

如您所见,在追加或连接后,我的合并索引似乎表明,例如,“ Sally”是一个帐户,而不是名称。我知道,如果在设置索引时按相同的顺序放置索引级别,我会得到想要的结果,并且可以在框架上重置索引以使其对齐,但是我希望有一个更直观的选择获取索引以使其名称对齐而不是位置对齐的方法。

1 个答案:

答案 0 :(得分:1)

某种程度的解决方法,您可以reset_index处理两个数据集,concat,然后set_index

print(pd.concat([
    df1.reset_index(),
    df2.reset_index()
], sort=False).set_index([
    'Name',
    'Acct'
]))

                Value
Name  Acct           
Bob   Savings     101
Ann   Savings     102
Sally Checking    103
Bob   Savings     201
Ann   Savings     202
Sally Checking    203

尽管我不确定为什么您要具有相同索引的多行...