仅当满足另一列的条件时才填充

Fillna only if the condition of another column is met

我有一个数据框 test 看起来像这样:

| sales |transactions|
|-------|------------|
|0.0    |NaN         |
|0.0    |NaN         |
|3802.29|NaN         |
|4520.35|8359        |

我正在寻找一种方法,仅在 'sales' 列中具有 0 的行中用 0 填充 NaN 值,而不更改其他行。我试过这个:

test['transactions'] = test.apply(
        lambda row: 0 if row['sales'] == 0 else None,
        axis=1)

它适用于那些行,但问题是所有其他行都用 NaN 填充

输出:

| sales |transactions|
|-------|------------|
|0.0    |0.0         |
|0.0    |0.0         |
|3802.29|NaN         |
|4520.35|NaN         |

预期结果:

| sales |transactions|
|-------|------------|
|0.0    |0.0         |
|0.0    |0.0         |
|3802.29|NaN         |
|4520.35|8359        |

提前致谢。

mask

具体来说,使用 mask

中的 other 参数
df.assign(
    transactions=df.transactions.mask(df.sales == 0, other=0)
)

     sales  transactions
0     0.00           0.0
1     0.00           0.0
2  3802.29           NaN
3  4520.35        8359.0

如果您的交易不为空且销售额为零并且不想用零替换 non-null 交易,请执行以下操作:

mask = df.sales == 0 & df.transactions.isna()
df.assign(
    transactions=df.transactions.mask(mask, other=0)

)