Python: замените значение из фрейма данных, если такое же значение присутствует в списке

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных и список. Фрейм данных состоит из столбца «КОД» и «расстояние». Список состоит из строки значений. Я хочу, чтобы значение в «КОДЕ» было изменено на ноль, если значения из списка также присутствуют в столбце расстояние фрейма данных.

 import pandas as pd
df = pd.DataFrame({'CODE': np.arange(0, 220), 
                   'distance': np.arange(0, 1100, 5)})

a = [1080, 1090] #list
 

Я могу выполнить описанную выше операцию, сравнивая фрейм данных с одним значением, используя приведенный ниже код.

 df.loc[df.distance == 1080, 'CODE'] = 0
 

Это приводит к следующему результату:

      CODE  distance
3       3        15
4       4        20
..    ...       ...
215   215      1075
216     0      1080
217   217      1085
218   218      1090
 

Однако, когда я пытаюсь заменить значение 1080 списком a (см. Ниже), это не работает. Как я могу решить эту проблему?

 df.loc[df.distance == a, 'CODE'] = 0
 

Ответ №1:

Вы можете использовать pandas.Series.isin :

 df.loc[df.distance.isin(a), 'CODE'] = 0
 

Ответ №2:

Вы можете применить функцию df , которая проверяет, находится ли distance в a , и если да, измените соответствующее CODE значение на 0:

 df['CODE'] = df.apply(lambda x: 0 if x['distance'] in a else x['CODE'], axis=1)