我有两个数据帧 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']
也可以,但不需要在右侧添加限制。
关于python - 用另一个数据框中的值替换一个数据框中的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701538/