我有两个数据框。第一个是这样的:
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])
但这是行不通的。
最佳答案
我打印了df和df2,以便您可以确认这些是您正在使用的DataFrame。
>>> 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个令牌。因此,我认为您的意思是相反的。将how ='right'放入联接中将以另一种方式进行。
关于python - 如何在 Pandas 中对齐DFS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33411466/