python - 根据 pandas DataFrame 中其他列的值将 NaN 值更改为 0

标签 python pandas dataframe

我要改NaN一列中的值基于另一列的值。

第一个表

<表类=“s-表”> <标题> 一个 B <正文> 2 3 0 NaN 2 NaN 4 2

目标表格

<表类=“s-表”> <标题> 一个 B <正文> 2 3 0 0 2 NaN 4 2

所以我想将 NaN 更改为 0,如果该行中 A 列的值也是 0。

我创建的Python代码:

for i in range(len(df)):
    if df.loc[i,'A'] == 0 and math.isnan(df.loc[i,'B']) = True:
        df.loc[i,'B'] = 0

但是这段代码看起来很慢,因为我想对 2000 万行执行此操作。有没有更快的方法来做到这一点?

最佳答案

首先使用&(逐元素and运算符)组合条件:

conditions = df['B'].isnull() & df['A'].eq(0)

# 0    False
# 1     True
# 2    False
# 3    False
# dtype: bool

然后您可以向量化分配(无循环):

  • 使用单个loc:

    df.loc[conditions, 'B'] = 0
    
  • 或者mask满足这些条件的值为 0:

    df['B'] = df['B'].mask(conditions, 0)
    

输出:

#    A    B
# 0  2  3.0
# 1  0  0.0
# 2  2  NaN
# 3  4  2.0

关于python - 根据 pandas DataFrame 中其他列的值将 NaN 值更改为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69231243/

相关文章:

python - 对于所有列,给定列中的所有行都必须匹配

python-3.x - 在 Pandas 数据框中组合具有重叠时间段的行

python - 使用 apply + 函数为 pandas 数据框创建多个新列

python - 合并具有相同行数的2个数据框时出现值错误

python - 配对嵌套列表中的元素

python - 在特定情况下触发时输入验证停止工作

python - 初始化dask系列

python - Pandas 类别子组 0 个计数

python - 在 Jupyter Notebook Pandas 的 For 循环中打印视觉上令人愉悦的数据帧

Python 通过 http 发送数据