我有两个数据帧。第一个是这样的:
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永远不会超过令牌。
我尝试了以下
pandas.concat([df1,df2],axis=1,join_axes=[df1.index])
但它没有用。
答案 0 :(得分:1)
我打印出了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。",但在示例中,file_1.3在df2中有1个ID,在df中有0个令牌。所以,我认为你的意思是相反。把如何='对'在联接中将以另一种方式执行。