Как посчитать перекрывающиеся значения среди столбцов - PullRequest
0 голосов
/ 07 июня 2018

Пожалуйста, позвольте мне задать вопрос о кадре панд.Например, у меня есть такой фрейм данных.

df = pd.DataFrame({'Dog': ['aa','bb','cc','dd','aa','ff'], 'Cat':['dd','ee','dd','as','ae','ee'], 'Bird':['ff','cd','ee','def','ae','as']})
df

Каждый столбец представляет информацию о животных.Я хочу знать, сколько совпадений существует среди животных.Например, собаки и кошки разделяют «dd», поэтому одно совпадение.Собака и птица разделяют "ff", поэтому одно совпадение.

У некоторых животных есть дубликаты в своих столбцах.Например, у Собаки есть дубликат «аа».Поэтому я хочу сначала удалить дубликаты на животном, а затем проанализировать количество дубликатов среди животных.

Если бы вы могли высказать свои мысли, я был бы очень благодарен за это.

PS Ожидаемый вывод похож на эту панель.

enter image description here

Спасибо.

1 Ответ

0 голосов
/ 07 июня 2018

Вот один из способов.Основная задача состоит в том, чтобы получить перекрестную таблицу животных и особенностей.После этого получается матрица совместного вхождения с умножением матрицы.

Обратите внимание, что числа на диагонали отражают количество уникальных особенностей каждого животного, что отличается от вашего примера.

# get rid of duplicates and align animal names with features
df2 = df.stack().reset_index(1).drop_duplicates()
# get a crosstabulation
df3 = pd.crosstab(df2.iloc[:, 1], df2.iloc[:, 0])
# coocurrence matrix is obtained with matrix multiplication
res = df3.T @ df3
# level_1  Bird  Cat  Dog
# level_1
# Bird        6    3    1
# Cat         3    4    1
# Dog         1    1    5
...