Python,pandas:用另一个DF的相同索引值替换一个DF中的值

时间:2016-02-13 12:45:27

标签: python-2.7 pandas

我有两个具有完全相同索引的数据框:

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 个答案:

答案 0 :(得分:3)

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

df1.loc[df2.index] = df2

答案 1 :(得分: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_index mergeindex列,然后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