Python 使用多索引附加两个数据帧
我有两个数据帧,每个都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或concat时,我希望pandas将索引对齐,就像追加之前对齐无索引列一样。是否有一个函数或参数可以传递给append或concat,以使其按我希望的方式工作(我认为应该是标准的)Python 使用多索引附加两个数据帧,python,pandas,Python,Pandas,我有两个数据帧,每个都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或concat时,我希望pandas将索引对齐,就像追加之前对齐无索引列一样。是否有一个函数或参数可以传递给append或concat,以使其按我希望的方式工作(我认为应该是标准的) 将熊猫作为pd导入 df1=pd.DataFrame(数据={'Name':['Bob','Ann','Sally'],'Acct':['Savings','Savings','Checking'],'Value':[101102103]}
将熊猫作为pd导入
df1=pd.DataFrame(数据={'Name':['Bob','Ann','Sally'],'Acct':['Savings','Savings','Checking'],'Value':[101102103]})
df1=df1.set_索引(['Name','Acct'])
打印(df1)
df2=pd.DataFrame(数据={'Acct':['Savings','Savings','Checking'],'Name':['Bob','Ann','Sally'],'Value':[201202203]})
df2=df2.set_索引(['Acct','Name'])
打印(df2)
打印(df1.附加(df2))
打印(pd.concat([df1,df2]))
价值
姓名账户
鲍勃储蓄101
安储蓄102
莎莉正在检查103
价值
账户名称
储蓄银行201
安202
检查Sally 203
价值
姓名账户
鲍勃储蓄101
安储蓄102
莎莉正在检查103
储蓄银行201
安202
检查Sally 203
价值
姓名账户
鲍勃储蓄101
安储蓄102
莎莉正在检查103
储蓄银行201
安202
检查Sally 203
正如您所看到的,在附加或连接之后,我的组合索引显示,例如,“Sally”是一个帐户,而不是一个名称。我知道,如果我在设置索引时将索引级别按相同的顺序排列,我将得到我想要的,并且我可以重置框架上的索引以对齐它们,但我希望有一种更直观的方法使索引在名称上对齐,而不是在位置上对齐。某种程度上是一种解决方法,您可以
重置两个数据集上的索引,concat
它们,然后设置索引
:
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
虽然我不知道为什么您希望有多行具有相同的索引…Hi,您是否已经尝试在连接数据帧之前将pandas.DataFrame.swaplevel
应用于其中一个数据帧?有关更多详细信息,请参阅。类似于为什么要有多行具有相同索引?@IanThompson抱歉,我的示例比预期的要人工一些。我不想要那种情况。我应该在第二个df中使“accts”有所不同。我不认为它比swaplevel
更直观。Pandas关心的是多索引中索引的级别,而不是标签。