Как убрать повторяющиеся значения из столбца с разделенными запятой подстроками?
В таблице, значения столбца представлены строками:
df = pd.DataFrame({ 'a':['female, female, female, female, male, female', 'female, male, female, female', 'female, female, female', 'male, male, male']})
a
0 female, female, female, female, male, female
1 female, male, female, female
2 female, female, female
3 male, male, male
Моё решение с использованием метода set():
f = lambda x: [set(y) for y in x.split('; ')]
df['b'] = df['a'].apply(f)
Даёт следующий результат:
a b
0 female, female, female, female, male, female [{m, , e, ,, a, f, l}]
1 female, male, female, female [{m, , e, ,, a, f, l}]
2 female, female, female [{m, , e, ,, a, f, l}]
3 male, male, male [{m, , e, ,, a, l}]
А нужно:
a b
0 female, female, female, female, male, female female, male
1 female, male, female, female female, male
2 female, female, female female
3 male, male, male male
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Вариант 1:
df["res"] = [", ".join(set(x.split(", "))) for x in df["a"]]
Вариант 2:
df["res"] = df["a"].str.split(", ").apply(lambda x: ", ".join(set(x)))
Вариант 3:
df["res"] = df["a"].str.split(", ").explode().groupby(level=0).apply(lambda x: ", ".join(set(x)))
Результат:
In [93]: df
Out[93]:
a res
0 female, female, female, female, male, female male, female
1 female, male, female, female male, female
2 female, female, female female
3 male, male, male male