我有一个带有一列的数据框,其观察值以“ P”或“ N”开头,后跟一个数字。
df
Col1 Col2
... "P14"
"N13"
我想在Col2中更改这些观察值。
如果字符串以P开头,则将观察值更改为仅数字。
否则,如果字符串以N开头,则将观察值更改为数字的负数。
使用for循环,我设法做到了
i = 0
for value in df["Col2"]:
if df[0] == "P":
value = int([pvi[1:3])
...
df["Col2"][i] = value
i += 1
但是我想知道是否有一种方法可以使用更多的pandas / numpy方法。我已经走了这么远:
df["Col2"] = np.select(
[
df["Col2"].str.startswith("P"),
df["Col2"].str.startswith("N"),
],
[
# Stuck here.
???,
???
],
default = "Unknown"
)
谢谢!
答案 0 :(得分:1)
使用np.where:
s=pd.Series([float(key[2:]) for key in df['Col2']])
df['Col2']=np.where(df['Col2'].str.contains('P'),s,-s)
print(df)
Col1 Col2
... 14.0
-13.0