Python 如何在pandas中对齐dfs

Python 如何在pandas中对齐dfs,python,pandas,Python,Pandas,我有两个数据帧。第一个是这样的: idx token tag file 0 This AA file_1.1 1 is AA file_1.1 2 a AA file_1.2 第二个是这样的 file file_1.1 IXX GXX file_1.2 AXX file_1.3 AXX 如何将两者结合起来,使我有以下几点: idx tok

我有两个数据帧。第一个是这样的:

 idx  token   tag   file
 0    This    AA    file_1.1         
 1    is      AA    file_1.1
 2    a       AA    file_1.2
第二个是这样的

file          
file_1.1    IXX    GXX
file_1.2    AXX    
file_1.3    AXX
如何将两者结合起来,使我有以下几点:

 idx  token   tag   file        ID  
 0    This    AA    file_1.1    IXX         
 1    is      AA    file_1.1    GXX
 2    a       AA    file_1.2    AXX
因此,首先我需要按文件列对齐(我可以这样做),然后如果一行有id,我必须将其添加到id列,如果它有多个id,则将其添加到第一个标记,将第二个标记添加到第二个标记,依此类推。我将永远不会有超过每行令牌的ID

我尝试了以下方法

pandas.concat([df1,df2],axis=1,join_axes=[df1.index])

但它不起作用。

我打印了df和df2,以便您可以确认这些是您正在使用的数据帧

>>> print df
  token tag      file
0  This  AA  file_1.1
1    is  AA  file_1.1
2     a  AA  file_1.2

>>> print df2
            0     1
file               
file_1.1  IXX   GXX
file_1.2  AXX  None
file_1.3  AXX  None

>>> a = df.set_index(['file', df.groupby('file').cumcount()])
>>> print a
           token tag
file                
file_1.1 0  This  AA
         1    is  AA
file_1.2 0     a  AA

>>> b = df2.stack().to_frame('ID')
>>> print b   
             ID
file           
file_1.1 0  IXX
         1  GXX
file_1.2 0  AXX
file_1.3 0  AXX

>>> c = a.join(b).reset_index(1, drop=True).reset_index()
>>> print c
       file token tag   ID
0  file_1.1  This  AA  IXX
1  file_1.1    is  AA  GXX
2  file_1.2     a  AA  AXX

请注意,这将是一个左连接。您说过“我的ID永远不会超过每行的令牌数”,但在示例中,文件_1.3在df2中有1个ID,在df中有0个令牌。所以,我想你的意思是相反的。将“how='right'放在联接中会以另一种方式进行。

第二个联接中的列是什么?
IXX
属于哪一列?未命名。如果有什么东西是分开的。大多数列只包含一项。我每行最多有6个项目。你能试试
df2.columns.values
和post solutionarray([u'0',u'1',u'2',u'3',u'4',u'5',u'6'],dtype=object)我不知道堆栈函数。这正是我想要的。我真的很喜欢这个解决方案。非常感谢。我遇到了一个问题。我可以通过邮件问你一个问题吗?