2017-07-20 73 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