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

标签 python pandas

我有两个数据帧 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'] 是一个索引标签为 012342被忽略,因为左侧没有对应的索引标签。

换句话说,

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

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

关于python - 用另一个数据框中的值替换一个数据框中的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45701538/

相关文章:

python - 如何使用 Tensorflow Federated 中的多个功能构建模型?

python - 将列添加到具有重复序列的数据框中

python - 确定 pandas 数据框中另一列的列最大值

python - 使用 pandas 数据框列中的正则表达式删除 URL 字符串的一部分

python - 滚动窗口 Pandas 中的不同对

python - SQLAlchemy Unicode 难题

python - 在子进程中重定向ffmpeg的输出

python - GUI 程序的日志记录策略

python - 将操作数据帧的函数应用到 groupby

python - 为什么数据框的内容会影响设置?