Как получить все совпадения в строковом столбце? - PullRequest
3 голосов
/ 06 мая 2020

Возьмем этот небольшой фрейм данных:

df = pd.DataFrame(dict(Name=['abc','abcd','bc']))
   Name
0   abc
1  abcd
2    bc

Я хотел бы создать новый фрейм данных:
- Имена его индекса и столбца равны значениям столбца Имя
- Чьи значения равны true или false, если индекс принадлежит имени столбца

Ожидаемый результат:

      abc   abcd  bc
abc   True  True  False
abcd  False True  False
bc    True  True  True

Как я могу сделать?

1 Ответ

3 голосов
/ 06 мая 2020

Используйте Series.str.contains в понимании списка, создайте маски и объедините их с помощью concat, затем установите индекс, транспонируйте на DataFrame.T и последний удалить имена индексов и столбцов на DataFrame.rename_axis:

s = df['Name']
L = [s.str.contains(x) for x in s]
df = pd.concat(L, axis=1, keys=s).set_index(s).T.rename_axis(index=None, columns=None)
print (df)
        abc  abcd     bc
abc    True  True  False
abcd  False  True  False
bc     True  True   True
...