我有一个表,其中包含一些像这样的值,
a b
s1 10
s2 12-
s3 13
s4 1-
s5 11
此表中val-表示-val,即12-表示-12
我要转换成这种形式
a b
s1 10
s2 -12
s3 13
s4 -1
s5 11
如何将此列 b 转换为整数列。
到目前为止,我已经尝试过了,
mask=df['b'].str.endswith('-')
df.loc[mask,'b']=df['b'].str.rstrip('-').astype(int)*(-1)
我可以得到一个要求的结果,但我急切地寻找这个问题是否有其他最优解。
请您参考如下方法:
首选答案
df.assign(b=df.b.str.replace('(.+)-', r'-\1').astype(int))
a b
0 s1 10
1 s2 -12
2 s3 13
3 s4 -1
4 s5 11
尝试快速回答
使用列表理解
df.loc[:, 'b'] = pd.to_numeric(
[x[-1] + x[:-1] if x.endswith('-') else x for x in df.b.values.tolist()]
)
df
a b
0 s1 10
1 s2 -12
2 s3 13
3 s4 -1
4 s5 11
搞乱答案
mask = df.b.str.endswith('-')
df.loc[mask, 'b'] = (lambda s: s.str[-1].str.cat(s.str[:-1]))(df.b[mask])
df.b = df.b.astype(int)
df
a b
0 s1 10
1 s2 -12
2 s3 13
3 s4 -1
4 s5 11
