我有两个数据框,每个数据框都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或合并时,我希望熊猫将索引对齐,就像它在追加之前对齐无索引的列一样。是否可以传递一个函数或参数来附加或连接,以使其按我希望的方式工作(我认为应该是标准的)?
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”是一个帐户,而不是名称。我知道,如果在设置索引时按相同的顺序放置索引级别,我会得到想要的结果,并且可以在框架上重置索引以使其对齐,但是我希望有一个更直观的选择获取索引以使其名称对齐而不是位置对齐的方法。
答案 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
尽管我不确定为什么您要具有相同索引的多行...