Pandas:如何根据观察属性更改列观察
Pandas: How to change column observations based on that observations attributes
我有一个数据框,其中有一列的观察值以 "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"
)
谢谢!
使用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
我有一个数据框,其中有一列的观察值以 "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"
)
谢谢!
使用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