根据另一个DataFrame填充Pandas列

时间:2017-07-20 18:53:08

标签: python pandas

我有两个数据框,并想知道如何使用另一个中的某些值向其中一个添加列。具体来说,我的数据框看起来像:

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

我的申请涉及非常大的数据框架,因此我不认为迭代是一个不错的选择。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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