Python 用类似索引替换数据帧中的值

Python 用类似索引替换数据帧中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个索引相似但不相等的数据帧: df1 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'), index = list ('IJKLMNOPQR')) df2 = pd.DataFrame({'1': [1,2,3,4,5,6,7], '2':[3,4,5,6,7,8,9]}, index =list('IQLMRFW') ) 我想做的是用df2第1列中的值替换df1第A列中的值,其中df1和df1共享一个索引

我有两个索引相似但不相等的数据帧:

df1 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'), index = list      ('IJKLMNOPQR')) 



df2 = pd.DataFrame({'1': [1,2,3,4,5,6,7], '2':[3,4,5,6,7,8,9]}, index =list('IQLMRFW') )
我想做的是用df2第1列中的值替换df1第A列中的值,其中df1和df1共享一个索引值。例如,随机值df1[I,A]将替换为df2[I,1]的值


有比使用for循环更有效的方法吗?

更改df2的列,并使用
更新

df2.columns=['A','B']
df1.update(df2)
df1
Out[448]: 
          A         B         C         D
I  1.000000  3.000000  0.792863  0.501980
J  0.545532  0.142258  0.814975  0.207339
K  0.335758  0.114109  0.864096  0.435545
L  3.000000  5.000000  0.106752  0.983470
M  4.000000  6.000000  0.314330  0.793173
N  0.715468  0.248352  0.670970  0.571507
O  0.963878  0.450892  0.342048  0.498544
P  0.880807  0.834060  0.905670  0.015289
Q  2.000000  4.000000  0.587087  0.744085
R  5.000000  7.000000  0.114770  0.776954

您可以使用以下代码:

df1.loc[[value for value in df2.index.values if value in df1.index.values],'A'] = df2['1']
输出为:

      A           B        C           D
I   1.000000    0.747035    0.318160    0.377931
J   0.552534    0.463665    0.338471    0.973440
K   0.584753    0.746475    0.276260    0.587056
L   3.000000    0.661161    0.955711    0.400889
M   4.000000    0.148509    0.434616    0.308061
N   0.837274    0.005138    0.136240    0.449102
O   0.877274    0.439709    0.600163    0.359086
P   0.041142    0.789117    0.924934    0.872771
Q   2.000000    0.607324    0.201463    0.875181
R   5.000000    0.497730    0.207983    0.574494

如果只想更改df1中的A列,请使用


雷,谢谢你。你的评论正是我想要的。
df1['A'].update(df2['1'])

print(df1)

          A         B         C         D
I  1.000000  0.047654  0.260428  0.391113
J  0.305520  0.021654  0.634946  0.084545
K  0.577922  0.846770  0.783604  0.330981
L  3.000000  0.566063  0.620431  0.490843
M  4.000000  0.612603  0.145364  0.701902
N  0.665450  0.910101  0.909424  0.574349
O  0.245765  0.457923  0.383724  0.945154
P  0.301374  0.674204  0.029119  0.011912
Q  2.000000  0.680618  0.041484  0.783958
R  5.000000  0.192027  0.851710  0.330989