用类似的索引替换Pandas DataFrame中的值

时间:2018-06-05 01:08:55

标签: python pandas dataframe

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

<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循环更有效的方法呢?

3 个答案:

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