Как сравнить иерархию в двух кадрах данных Pandas? (Обновлены новые данные образца)Python

Программы на Python
Anonymous
Как сравнить иерархию в двух кадрах данных Pandas? (Обновлены новые данные образца)

Сообщение Anonymous »

У меня есть два фрейма данных, которые отражают иерархию одного и того же набора данных. Df1 является более полным по сравнению с Df2, поэтому я хочу использовать Df1 в качестве стандарта для анализа правильности иерархии в Df2. Однако оба фрейма данных плохо отображают иерархию, поэтому сложно понять полную структуру построчно.
Например. Компания A может иметь дочерние компании: B, C, D, E, и отношения таковы: A владеет B владеет C владеет D владеет E.
В Df1 может быть показано:

Код: Выделить всё

| Ultimate Parent | Parent | Child |
| --------------- | ------ |-------|
| A               | B      | C     |
| B               | C      | D     | --> new
| C               | D      | E     |
Поэтому, если вы разбиваете анализ построчно, один и тот же объект может отображаться как «Основной родительский» или «Дочерний» одновременно, что усложняет задачу.
С другой стороны, поскольку Df2 неполный, в нем не будет всех данных (A, B, C, D, E). Он будет содержать только частичные данные, например. В данном случае A, D, E, поэтому кадр данных будет выглядеть так

Код: Выделить всё

| Ultimate Parent | Parent | Child |
| --------------- | ------ |-------|
| A               | D      | E     |
Теперь я хочу (1) использовать Df1, чтобы получить правильную/полную иерархию (2) сравнить и определить разрыв между Df1 и Df2. Логика следующая:
Если A владеет B владеет C владеет D владеет E, то Df1 выглядит следующим образом

Код: Выделить всё

| Ultimate Parent | Parent | Child |
| --------------- | ------ |-------|
| A               | B      | C     |
| C               | D      | E     |
Я хочу добавить 1 столбец, чтобы объединить все связанные объекты в порядке от конечного родительского элемента к дочернему

Код: Выделить всё

| Ultimate Parent | Parent | Child | Hierarchy   |
| --------------- | ------ |-------|-------------|
| A               | B      | C     |A, B, C, D, E|
| C               | D      | E     |A, B, C, D, E|
А затем сравните этот Df1 с Df2 и добавьте столбец в Df2, чтобы выявить разрыв. Самая идеальная (но необязательная) ситуация — иметь еще один столбец с указанием причины ошибки.

Код: Выделить всё

| Ultimate Parent | Parent | Child | Right/Wrong| Reason          |
| --------------- | ------ |-------|------------|-----------------|
| A               | D      | E     | Right      |                 |
| C               | B      | A     | Wrong      | wrong hierarchy |
| C               | A      | B     | Wrong      | wrong hierarchy | --> new
| G               | A      | B     | Wrong      | wrong entities  | --> new
| A               | F      | G     | Wrong      | wrong entities  |
Я пробовал несколько методов сопоставления строк, но застрял на этапе и идее, в которой, по моему мнению, порядок имеет значение, но я не знаю, как сравнивать строки по порядку, когда они связаны, но разбросаны по разным строкам.


Подробнее здесь: https://stackoverflow.com/questions/783 ... ta-updated

Вернуться в «Python»