вы можете использовать .isin () , который возвращает ряд с True
/ False
для каждой строки, исходя из того, находится ли он в списке значений.затем используйте .astype(int)
, чтобы получить 1
/ 0
.
попробуйте это:
import pandas as pd
import numpy as np
df = pd.DataFrame.from_dict({'colour': ['white', 'yellow', 'black', 'purple', 'green']})
Preferredcolours = ['red','yellow','green', 'blue']
df["PreferredMathcing"] = df['colour'].isin(Preferredcolours).astype(int)
print(df)
вывод:
colour PreferredMathcing
0 white 0
1 yellow 1
2 black 0
3 purple 0
4 green 1
ПРИМЕЧАНИЕ:
выбор решения с чистой библиотечной функцией, скорее всего, превзойдет решение, используя apply
с пользовательской логикой python.
сопоставление тех, кто находится на моем компьютерепредлагает .isin()
почти в 8 раз быстрее:
with '.isin()': 1.0591506958007812
with '.apply()': 8.234664678573608
ratio: 7.774780974248154