如何使用Python Pandas用相反的符号替换所有值的符号

时间:2019-07-19 19:34:33

标签: python pandas

在将我引向以下主题之前,请阅读:Python Pandas replace values by their opposite sign

我有以下DataFrame:

A      | B
"1.9"  | "S"
"1.2"  | "H"
"1.9"  | "S"

对于B为“ S”的所有行,我想将A列中的值替换为具有相反符号的值,因此结果如下:

A       | B
"-1.9"  | "S"
"1.2"   | "H"
"-1.9"  | "S"

不幸的是,所有值都是String。

设置正确的查询并使用其他方式更新匹配值没有问题:

data.loc[(data["B"]) == 'S', data.columns[1]] = 999

这将导致以下结果:

A       | B
"999"   | "S"
"1.2"   | "H"
"999"   | "S"

因此,我知道如何在正确的条目中进行更新,但是我不知道如何使用相反的符号来更新值。

2 个答案:

答案 0 :(得分:3)

选中np.where

df['A']=np.where(df['B']=='S', '-'+df['A'], df['A'])

根据SpghttCd的建议

df['A']=np.where((df['B']=='S')&(~df.a.str.startswith('-')), '-'+df['A'], df['A'])

答案 1 :(得分:1)

仍使用pandas .loc

 df.loc[df.B =='S', 'A'] = (df.A.astype(float)*-1).astype(str)

我假设输入和输出都是字符串值