Как перевести строковые данные во множество без разбиения на символы?
Даны два столбца фрейма данных, один числовой, второй в виде строки записанных через пробел чисел.
Необходимо сформировать третий столбец булевых значений, в котором 1 - число col1 входит в множество числе из col2, а 0 - не входит.
Пытаюсь через np.where(), но метод .apply(str) дробит двузначные числа в строке на множество из двух элементов.
Как создавать множества из строки без разбиения?
Ниже пример для воспроизведения кейса:
import pandas as pd
import numpy as np
df = pd.DataFrame([[10,'20 10 3'],[20,'1 45 60'],[30,'46 32 9']],columns=['col1','col2'])
df.col1 = df.col1.apply(str)
print(df.col1.apply(set))
np.where((df.col1.apply(set)) & (df.col2.str.split(' ').apply(set)),1,0)
Результат:
0 {0, 1}
1 {2, 0}
2 {0, 3}
array([0, 0, 0])
А должно быть:
array([1, 0, 0])
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
попробуйте так:
df["col3"] = (df["col2"]
.str.split("[\s\,]", expand=True)
.isin(df["col1"])
.any(axis=1)
.astype("int8"))
результат:
In [330]: df
Out[330]:
col1 col2 col3
0 10 20 10 3 1
1 20 1 45 60 0
2 30 46 32 9 0