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