Skip to main content
 首页 » 编程设计

python之用另一个数据框中的值替换一个数据框中的零

2025年05月04日8langtianya

我有两个数据帧 df1 和 df2: df1 显示在这里:

   age 
0   42 
1   52 
2   36 
3   24 
4   73 

df2 显示在这里:

   age 
0    0 
1    0 
2    1 
3    0 
4    0 

我想用 df1 中相应的条目替换 df2 中的所有零。更专业地说,如果 df2 中某个索引处的元素为零,那么我希望这个元素被 df1 中的相应条目替换。

因此,我希望 df2 看起来像:

   age 
0    42 
1    52 
2    1 
3    24 
4    73 

我尝试使用替换方法,但它不起作用。请帮忙 :) 提前致谢。

请您参考如下方法:

你可以使用 where :

In [19]: df2.where(df2 != 0, df1) 
Out[19]:  
   age 
0   42 
1   52 
2    1 
3   24 
4   73 

上面,df2 != 0 是一个 bool 数据帧。

In [16]: df2 != 0 
Out[16]:  
     age 
0  False 
1  False 
2   True 
3  False 
4  False 

df2.where(df2 != 0, df1) 返回一个新的 DataFrame。当df2 != 0为True时,使用df2对应的值。如果为 False,则使用 df1 的相应值。


另一种方法是使用 df.loc 进行赋值。 :

df2.loc[df2['age'] == 0, 'age'] = df1['age'] 

df.loc[mask, col] 选择 bool 系列 mask 为 True 的 df 行,以及列标签是 col。

In [17]: df2.loc[df2['age'] == 0, 'age'] 
Out[17]:  
0    0 
1    0 
3    0 
4    0 
Name: age, dtype: int64 

在赋值中使用时,例如df2.loc[df2['age'] == 0, 'age'] = df1['age'], Pandas 执行自动索引标签对齐。 (请注意上面的索引标签是 0、1、3、4——跳过了 2)。因此 df2.loc[df2['age'] == 0, 'age'] 中的值被 d1['age'] 中的相应值替换。尽管 d1['age'] 是一个索引标签为 0、1、2、3和4,2被忽略,因为左侧没有对应的索引标签。

换句话说,

df2.loc[df2['age'] == 0, 'age'] = df1.loc[df2['age'] == 0, 'age'] 

也可以,但不需要在右侧添加限制。