2016-07-04 8 views
2

Ich suche eine Lösung für das folgende Problem. Ich habe eine Excel-Datei, die ich mit Pandas gelesen habe. Spalte A enthält eine Kennung und die Spalte B auch Identiers enthält, aber die Bezeichner in Spalte B sind mit der Kennung in Spalte A. Beispiel verknüpft:LinkedList in Python

+----------+----------+ | Column A | Column B | +----------+----------+ | ID1 | ID5 | +----------+----------+ | ID1 | ID6 | +----------+----------+ | ID1 | ID7 | +----------+----------+ | ID2 | ID8 | +----------+----------+ | ID2 | ID9 | +----------+----------+ | ID3 | ID8 | +----------+----------+ | ID3 | ID9 | +----------+----------+ | ID3 | ID10 | +----------+----------+ | ID3 | ID11 | +----------+----------+

So, jetzt möchte ich ID1 bis ID5 verknüpft haben, ID6 und ID7. ID2 verbunden mit ID8, ID9 usw.

In Java würde ich die verknüpfte Liste verwenden. Was soll ich in Python verwenden?

Danke!

+0

Nicht wirklich sicher, was Sie versuchen zu erreichen, Hier. Könnten Sie genauer sein? Vielleicht geben Sie ein Beispiel für den Java-Code, den Sie verwenden würden, und die Leute hier können ein Äquivalent in Python finden? –

+0

Sie könnten eine LinkedList in Python erstellen. Aber ein Diktat scheint meiner Meinung nach der natürlichste Weg zu sein. Python hat eingebaute Unterstützung für sie. Nachschlagen – Shalan

+0

Das ist keine verknüpfte Liste in Java oder einer anderen Sprache. Scheint ein Mapping zu sein. –

Antwort

2

Vielleicht ein defaultdict mit gesetzt?

from collections import defaultdict 
ident_pair_dict = defaultdict(set) 

for ind, row in df.iterrows(): # df is the pandas dataframe you read 
    ident_pair_dict[row['Column A']].add(row['Column B']) 
2

Da Sie Pandas verwenden zu lesen, können Sie das Wörterbuch mit Pandas Methoden konstruieren:

df.groupby('Column A')['Column B'].agg(lambda x: list(x)).to_dict() 
Out[42]: 
{'ID1': ['ID5', 'ID6', 'ID7'], 
'ID2': ['ID8', 'ID9'], 
'ID3': ['ID8', 'ID9', 'ID10', 'ID11']} 
0

Versuchen Sie folgendes:

dict(df.groupby('Column A')['Column B'].apply(list))