首页 > 解决方案 > 根据条件更改列的符号

问题描述

输入DF:

value1, value2
123L, 20
222S, 10
222L, 18

我想在 volumnvalue2value1生成L字母负数的值,所以我试图将它们乘以 -1

预期结果:

value1, value2
    123L, -20
    222S, 10
    222L, -18

我的代码

if np.where(DF['value1'].str.contains('L', case=False)):
    DF['value2'] = DF['value2'] * -1

但在输出中,我收到列value2负数的所有值。如何仅对选定的行实施此条件?谢谢

标签: pythonpandasdataframe

解决方案


您可以使用布尔索引loc

df.loc[df['value1'].str[-1] == 'L', 'value2'] *= -1

或者,使用pd.Series.mask

df['value2'].mask(df['value1'].str[-1] == 'L', -df['value2'], inplace=True)

如果您热衷于使用np.where,这是可能的,但很冗长:

df['value2'] = np.where(df['value1'].str[-1] == 'L', -df['value2'], df['value2'])

通知np.where已经矢量化,您不应将其与if.


推荐阅读