2016-04-12 9 views
0

Für die Matrix, wie untenCollapse Informationen nach bestimmten Spalte einer Zeile

A 20 200 
    A 10 150 
    B 60 200 
    B 80 300 
    C 90 400 
    C 30 300 

Mein Ziel versucht zu: für jede Kategorie (bezeichnet als A, B, C..in der 1. Säule), I Ich möchte sowohl die Mindest- als auch die Höchstzahl finden (als größte Reichweite). Also zu sehen:

A 10 200 
B 60 300 
C 30 400 

Also wie könnte ich mit Python tun?

+0

Im Allgemeinen funktionieren Min/Max-Algorithmen wie folgt. Sie weisen das Maximum dem ersten Wert zu und führen dann eine for-Schleife aus, die jeden Wert mit dem Maximum vergleicht und, falls er diesen Wert überschreitet, den max auf diesen Wert setzt. Wenn Sie 'numpy' verwenden können, gibt es die Funktionen' np.max' 'np.min', um das für Sie zu tun. Möglicherweise müssen Sie Ihre Daten auch transponieren, um sie in die richtige Reihenfolge zu bringen. Warum liefern Sie die Daten nicht in der Form, dass Sie sie als Python-Variable haben? – roadrunner66

Antwort

1

Ich würde beginnen mit:

maxs, mins = {}, {} 
for line in fd: 
    category, small, big = line.split() 
    if category not in maxs or big > maxs[category]: 
     maxs[category] = big 
    if category not in mins or small < mins[category]: 
     mins[category] = small 

# final printings 
for category in maxs: 
    print(category, mins[category], maxs[category], sep='\t') 

Diese dicts zurückgibt, die mit {c: (mins[c], maxs[c]) for c in maxs} zusammengefügt werden können.

Dieser Code setzt voraus, dass eine iterierbare Zeile den Namen fd hat. Könnte eine geöffnete Datei sein, die die Matrix in Rohtext enthält.

Wenn die Reihenfolge wichtig ist, ist eine gute Lösung, eine OrderedDict statt der regulären dict für mins und maxs zu verwenden.