[FIXED] Überprüfen Sie den Zirkelverweis in DataFrame (Python)

Ausgabe

Ich arbeite an einer Reihe von Mitarbeiterdaten, in denen alle Mitarbeiter einem Manager unterstellt sind. Im Datenrahmen werden alle Mitarbeiter als ID angezeigt und jede ID hat eine übergeordnete ID (die ID des Managers). Gibt es eine Möglichkeit zu überprüfen, ob die Berichtslinie eines Mitarbeiters direkt zu ihm selbst führt?

Beispieldatenrahmen:

pd.DataFrame({"id":[111,112,113],"parentid":[112,113,111]})

In diesem Beispiel berichtet Mitarbeiter 111 an 112, 112 berichtet an 113, 113 berichtet an 111. Die Zeile wird zu einem Zirkelbezug. Gibt es eine Möglichkeit, nach dieser Art von Zirkelverweis zu suchen?

Vielen Dank!

Lösung

Dies ist ein perfekter Anwendungsfall, um networkxIhre Daten als Diagramm zu betrachten.

Das ist dein Diagramm:

Kreisreferenzen Pandas-Graph

Erstellen Sie einen gerichteten Graphen und verwenden Sie ihn simple_cycles, um die Zirkelbezüge zu identifizieren

import networkx as nx

G = nx.from_pandas_edgelist(df, source='parentid', target='id',
                            create_using=nx.DiGraph)

list(nx.simple_cycles(G))

Ausgang:[[112, 111, 113]]

Wenn Sie die kreisförmigen Knoten beschriften möchten, können Sie weiter verwenden:

circular = {n for l in nx.simple_cycles(G) for n in l}

df['circular'] = df['id'].isin(circular)

Ausgabe (in einem komplexeren Beispiel):

    id  parentid  circular
0  111       112      True
1  112       113      True
2  113       111      True
3  210       211     False
4  211       212     False


Beantwortet von –
mozway


Antwort geprüft von –
Dawn Plyler (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like