Предположим, у меня есть два категориальных pandas.Series
, например:
> series_1 = pandas.Categorical(
["A", "B", "C", "A", "C"],
categories=["A", "B", "C"]
)
> series_2 = pandas.Categorical(
[1, 2, 3, 1, 3],
categories=[1, 3, 2]
)
Итак, две серии имеют одинаковое информационное содержание, но отличаются только тем, как категории были помечены. Моя цель - проверить это очень быстро, потому что у меня есть фрейм данных с сотнями таких столбцов.
До сих пор я вычислял таблицу сопряженности с pandas.crosstab
и проверял, является ли она диагональной матрицей (с np.diag(cont_table).sum() == cont_table.sum()
, что не идеально).
Я мог бы просто преобразовать метки в целые числа и всегда использовать порядок первого появления, чтобы гарантировать, что соответствующие метки будут назначены одному и тому же целому числу, но я чувствую, что это такая базовая задача, что, конечно, у панд уже есть какой-то способ делать это.
Отсюда возникает вопрос: существует ли быстрый и простой способ выполнить эту проверку с помощью нескольких вызовов методов панд?
EDIT:
Изменен другой пример, который более четко демонстрирует сложность задачи, поскольку некоторые ответы работали для предыдущего примера, но не решают общую проблему. Обратите внимание, что я не могу поверить, что категории в двух сериях будут правильно соединены в том же порядке, что и соответствующие метки.
В этой сущности есть код, который генерирует случайные экземпляры этой проблемы для проверки возможных решений. Код просто:
- генерирует два массива с одинаковой структурой, но разными метками
- метки создают две серии и вызывают метод
.astype('category')
.
Обычно генерирует случаи, когда категории не в порядке.