仅当满足另一列的条件时才填充
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)
)
我有一个数据框 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)
)