熊猫:如何基于该观察属性更改列观察

时间:2019-09-30 23:38:25

标签: pandas numpy case-when

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

谢谢!

1 个答案:

答案 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