2016-02-13 41 views
2

我有完全相同的索引两个数据帧:的Python,熊猫:从另一个DF通过相同指数值在一个DF替换值

the first one: 
      0   1   2 
2 0.011765 0.490196 0.015686 
2 0.011765 0.490196 0.015686 
2 0.007843 0.494118 0.007843 
2 0.007843 0.494118 0.007843 
2 0.007843 0.501961 0.011765 
..  ...  ...  ... 

0 0.000000 0.031373 0.039216 
0 0.031373 0.082353 0.105882 
0 0.094118 0.149020 0.192157 
0 0.094118 0.156863 0.215686 

[337962 rows x 3 columns] 

,第二个:

  0   1   2 
0 0.055852 0.118138 0.052386 
1 0.453661 0.665857 0.441551 
2 0.096394 0.635641 0.068524 
3 0.952545 0.827438 0.047632 
4 0.787729 0.823494 0.795792 
5 0.050284 0.549379 0.592593 
6 0.608805 0.215458 0.068293 
7 0.775640 0.091352 0.689224 

第一个DF非常庞大。我需要尽可能快地用小DF中具有相同索引的值替换巨大DF中的值。 如何? 感谢您的帮助。

回答

2

使用第二个数据帧的索引切片第一个,然后分配。

df1.loc[df2.index] = df2 
+0

很酷!谢谢! –

1

您可以通过索引使用merge空数据帧df1df2

print pd.merge(df1[[]], df2, left_index=True, right_index=True) 
      0   1   2 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 

或者join

print df1[[]].join(df2) 
      0   1   2 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 

如果您需要保存索引排序使用的列合并与reset_indexmergeindex然后set_index

df = pd.merge(df1[[]].reset_index(), df2.reset_index(), on='index').set_index('index') 
df.index.name = None 
print df 

      0   1   2 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
2 0.096394 0.635641 0.068524 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386 
0 0.055852 0.118138 0.052386