我有两个数据框,并想知道如何使用另一个中的某些值向其中一个添加列。具体来说,我的数据框看起来像:
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 :(得分: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