Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多索引附加两个数据帧_Python_Pandas - Fatal编程技术网

Python 使用多索引附加两个数据帧

Python 使用多索引附加两个数据帧,python,pandas,Python,Pandas,我有两个数据帧,每个都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或concat时,我希望pandas将索引对齐,就像追加之前对齐无索引列一样。是否有一个函数或参数可以传递给append或concat,以使其按我希望的方式工作(我认为应该是标准的) 将熊猫作为pd导入 df1=pd.DataFrame(数据={'Name':['Bob','Ann','Sally'],'Acct':['Savings','Savings','Checking'],'Value':[101102103]}

我有两个数据帧,每个都有一个多索引。多索引级别共享名称,但顺序不同。当我追加或concat时,我希望pandas将索引对齐,就像追加之前对齐无索引列一样。是否有一个函数或参数可以传递给append或concat,以使其按我希望的方式工作(我认为应该是标准的)

将熊猫作为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关心的是多索引中索引的级别,而不是标签。