Итак, ваши данные на самом деле содержат числовые данные с NaN, поэтому этого будет достаточно -
pd.Series.mask
/ where
df['SKU_CB'] = df.SKU.where(df.ClosingBalance.gt(0))
Или,
df['SKU_CB'] = df.SKU.mask(~df.ClosingBalance.gt(0))
df
SKU ClosingBalance SKU_CB
0 S1 10.0 S1
1 S2 NaN NaN
2 S3 0.0 NaN
3 S4 20.0 S4
Если случайно ваши данные имеют значения NaN-ish, которые не являются точно NaN, то здесь есть альтернатива.Используя pd.to_numeric
, определите, какие значения недопустимы, и используйте его для маскировки SKU
.
pd.to_numeric
с pd.Series.mask
/ where
df['SKU_CB'] = df.SKU.mask(
~pd.to_numeric(df.ClosingBalance, errors='coerce').gt(0)
)
Или,
df['SKU_CB'] = df.SKU.where(
pd.to_numeric(df.ClosingBalance, errors='coerce').gt(0)
)
df
SKU ClosingBalance SKU_CB
0 S1 10 S1
1 S2 np.nan NaN
2 S3 0 NaN
3 S4 20 S4