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)我不知道堆栈函数。这正是我想要的。我真的很喜欢这个解决方案。非常感谢。我遇到了一个问题。我可以通过邮件问你一个问题吗?