在将我引向以下主题之前,请阅读: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"
因此,我知道如何在正确的条目中进行更新,但是我不知道如何使用相反的符号来更新值。
答案 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)
我假设输入和输出都是字符串值