Python Pandas, как обновить столбец, если другой столбец содержит определенную строку - PullRequest
2 голосов
/ 16 октября 2019

У меня есть фрейм данных, и я хочу заменить значение в MinP на значение ТОЛЬКО в MaxP, если MaxP имеет +/- [Затем я удалю +/- и преобразую в число]

Мой код работает, но он устанавливает 0 в MinP, когда Maxp не имеет +/-, вместо этого я хочу оставить значение MinP

import pandas as pd 
df = pd.DataFrame({
    'MinP':['0','','-10','',],
    'MaxP':['20','15','12','+/-20']})

print(df)

df['MinP'] = df['MaxP'].apply(lambda x: df['MaxP'] if '+/-' in x else df['MinP'])
print(df)

    MinP   MaxP
0    0     20
1          15
2  -10     12
3       +/-20
    MinP   MaxP
0    0     20
1    0     15
2    0     12
3   20  +/-20

, с которым я также поиграл: df.loc [df ['MinP']] = np.where (df.MaxP.str.contains ("+/-"), df ['MaxP'], df.MinP), но никуда не попал.

Есть еще идеи?

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

+ - это специальный символ в регулярном выражении, поэтому вам нужно сделать contains('\+/-'). Также удобно использовать fillna:

df['MinP'] = df.MaxP.str.extract('^\+/-(\d+)')[0].fillna(df.MinP)

Вывод:

 MinP   MaxP
0    0     20
1          15
2  -10     12
3   20  +/-20

Примечание : '^\+/-(\d+)' только извлечь цифры. Если ваши данные содержат другие символы, например 20.1 или 2e10, вы можете использовать '^\+/-(.+)'

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

Вы можете использовать str.contains + numpy.where :

df['MinP'] = np.where(df.MaxP.str.contains('+/-', regex=False), df.MaxP, df.MinP)
print(df)

Выход

    MinP   MaxP
0      0     20
1            15
2    -10     12
3  +/-20  +/-20

Обратите внимание, что вы должны использовать regex=False, чтобы избежать интерпретации шаблона как регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...