我有两个数据帧具有相似但不相等的索引:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value='0'>Choose A Product</option>
<option id='custAddNewCategory' value='addnew' data-icon='glyphicon glyphicon-plus text-success'>Add new</option>
<option value='769'>1</option>
<option value='770'>1</option>
<option value='773'>1</option>
</select>
我想要做的是将df1,A列中的值替换为df2第1列中的值,其中df1和df1共享一个索引值。例如,随机值df1 [I,A]将被替换为df2 [I,1]的值。
有没有比使用for循环更有效的方法呢?
答案 0 :(得分:1)
更改df2的列,并使用update
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
答案 1 :(得分:1)
您可以使用以下代码:
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
答案 2 :(得分:1)
如果您只想更改df1中的A列,请使用Series.update。
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