2017-07-20 77 views
0

我有兩個數據框,並想知道如何使用另一個列中的某個值向其中的一列添加列。具體而言,我有一個看起來像數據幀:基於另一個DataFrame填充熊貓列

foo = pd.DataFrame(np.random.rand(3,3)) 
foo.columns = ['col_1','col_2','col_3'] 

     col_1  col_2  col_3 
0 0.661546 0.554032 0.753549 
1 0.063641 0.490173 0.998119 
2 0.370046 0.424208 0.125751 


bar = pd.DataFrame([[1, 2], [1,1], [3,3], [1,2], [2,1], [3,2]]) 

    0 1 
0 1 2 
1 1 1 
2 0 3 
3 1 2 
4 2 1 
5 0 2 

我想將列添加到bar,其值是foo在由bar列給出的位置值。所以,期望的結果是:

0 1 anything 
0 1 2 0.490173 
1 1 1 0.063641 
2 0 3 0.753549 
3 1 2 0.490173 
4 2 1 0.370046 
5 0 2 0.554032 

我的應用程序涉及非常大的數據幀,所以我不認爲迭代是一個好的選擇。任何幫助,將不勝感激。

+0

'熔體foo'然後'merge' – Wen

回答

0

試試這個

foo['Index']=foo.index 
df=pd.melt(foo,id_vars=['Index'],value_vars=[1,2,3]) 
df 
Out[563]: 
    Index variable  value 
0  0  1 0.178661 
1  1  1 0.065537 
2  2  1 0.926429 
3  0  2 0.139027 
4  1  2 0.502449 
5  2  2 0.971156 
6  0  3 0.161616 
7  1  3 0.530899 
8  2  3 0.420385 



bar.merge(df,left_on=[0,1],right_on=['Index', 'variable'],how='left')\ 
    .drop(['Index', 'variable'],axis=1) 

    0 1  value 
0 1 2 0.502449 
1 1 1 0.065537 
2 0 3 0.161616 
3 1 2 0.502449 
4 2 1 0.926429 
5 0 2 0.139027 
+0

這似乎是工作!我會在我的大集合上嘗試這個,儘管我在DataFrame foo的模擬中有很多列。儘管如此,我認爲我應該能夠到達那裏。我沒有想到融化! – Paco

+0

@Paco很高興幫助,美好的一天 – Wen