Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用来自另一个数据帧的同一列的值更新数据帧中的列_Python_Pandas - Fatal编程技术网

Python 使用来自另一个数据帧的同一列的值更新数据帧中的列

Python 使用来自另一个数据帧的同一列的值更新数据帧中的列,python,pandas,Python,Pandas,我有一个较大的数据框,其中有一个列,我想用一个较小的数据框中的新值更新它,只有在另一个列的行值匹配的情况下。左连接有正确的行,但有两列值需要“更新”(左和右)。我尝试了一个带drops的左合并,但是当然,如果匹配的列不匹配,我将尝试更新列中的值。我也尝试过这方面的变化: tips.loc[tips['tip'] < 2, 'tip'] = 2 结果应该如下所示: CAT Value 0 A 12 1 B 34 2 C 22 3 D 43

我有一个较大的数据框,其中有一个列,我想用一个较小的数据框中的新值更新它,只有在另一个列的行值匹配的情况下。左连接有正确的行,但有两列值需要“更新”(左和右)。我尝试了一个带drops的左合并,但是当然,如果匹配的列不匹配,我将尝试更新列中的值。我也尝试过这方面的变化:

tips.loc[tips['tip'] < 2, 'tip'] = 2
结果应该如下所示:

 CAT  Value
0   A     12
1   B     34
2   C     22
3   D     43
4   E     21

虽然本例中的左框已经更新,但我并不是专门针对这种情况。我想覆盖其中的任何值。有什么帮助吗?Thx.

如果值存在,您似乎希望将
df
中的
值替换为
df2
中相应的
值。也就是说,假设您有一个
CAT
F,它在
df
中的相应值为
36
,您希望它被99(来自
df2
)所取代

使用
合并

df= df.merge(df2, on = 'CAT', how = 'left')
df['Value'] = df[['Value_x', 'Value_y']].apply(lambda x: np.where(df['Value_y'].isna(), df['Value_x'], df['Value_y'])).drop(columns = ['Value_y'])
df.drop(columns = ['Value_x', 'Value_y'])
输出:

  CAT  Value
0   A   12.0
1   B   34.0
2   C   22.0
3   D   43.0
4   E   21.0
5   F   99.0
  CAT  Value
0   A   12.0
1   B   34.0
2   C   22.0
3   D   43.0
4   E   21.0
5   F   99.0