Панды: Как изменить столбцы наблюдений на основе этих атрибутов наблюдений - PullRequest
0 голосов
/ 01 октября 2019

У меня есть фрейм данных со столбцом, наблюдения которого начинаются с буквы «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

Но мне было интересно, есть ли способ, которым я могу сделать это, используя более панда / Numpy подход. Я дошел до этого:

df["Col2"] = np.select(
    [
        df["Col2"].str.startswith("P"), 
        df["Col2"].str.startswith("N"),
    ],
    [
        # Stuck here.
        ???,
        ???
    ],
    default = "Unknown"
)    

Спасибо!

1 Ответ

1 голос
/ 01 октября 2019

использование 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
...