#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)