Pandas:如何基于该观测值属性更改列观测值

问题描述 投票:0回答:1

我有一个带有一列的数据框,其观察值以“ 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"
)    

谢谢!

pandas numpy case-when
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.