我有两个数据帧 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']
也可以,但不需要在右侧添加限制。
