2015-10-29 36 views
1

我有兩個數據框。第一個是這樣的:如何在大熊貓中對齊dfs

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

第二個列是什麼? 'IXX'屬於哪一列? –

+0

這些是未命名的。如果有東西被分離。大多數列只包含一個項目。至多我每行有6個項目。 – Angelo

+0

可以試試'df2.columns.values'併發布解決方案 – WoodChopper

回答

1

我打印出了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個標記。所以,我認爲你的意思是相反的。在連接中放入「正確的」將以另一種方式進行。

+0

我不知道堆棧的功能。這正是我所期待的。我真的很喜歡這個解決方案。謝謝! – Angelo

+0

我遇到問題。我可以通過郵件問你一個問題嗎? – Angelo