Zugeordnetes Maximum in Messwerten ermitteln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sarliefer
User
Beiträge: 4
Registriert: Mittwoch 30. September 2015, 12:58

Hallo,

ich habe eine Datei mit einer großen Anzahl an Messwerten, die durch Leerzeichen voneinander getrennt sind.

Ausschnitt der Datei:

Code: Alles auswählen

11.673	301.65	5.1
7.700	1794.9	1204.95
11.673	301.65	5.13
3.737	1794.9	611.55
7.700	1794.88	1204.95
11.673	301.65	5.18
11.674	311.55	5.1
Ich würde gerne das Maximum der dritten Spalte für die zugeordnete ID aus der ersten Spalte ermitteln, so dass die Datei danach folgendermaßen aussieht:

Code: Alles auswählen

11.673	5.18
7.700	1204.95
3.737	611.55
11.674	5.1
Gibt es eine einfache Methode für mein Anliegen? Ich wäre auch für eine vorgeschlagene Vorgehensweise sehr dankbar.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du solltest dein Problem in Teilprobleme zerlegen:

- einlesen der Datei in einzelne Datensaetze. Das kann man sich entweder mit dem csv-Modul bauen, oder per Hand mit string-Methoden wie split() und co.
- umwandeln der drei Werte pro Datensatz in float-Werte.
- zuordnen der Schluesselwerte zu den Werten der dritten Spalte. Eine geeignete Datenstruktur dafuer ist collection.defaultdict, mit einer Liste als default-Argument.
- reduzieren auf das maximale Argument. Dazu gibt's die max-Funktion.
- rausschreiben der entstandenen Zuordnung.

Fuer Schritte 1+2 mag das pandas-Modul eine gute Wahl sein, weil das schon recht viel Intelligenz mitbringt zum einlesen von tabellarischen Daten. Persoenlich gearbeitet habe ich damit aber noch nicht.
BlackJack

Wenn man Pandas verwendet, kann man damit auch gleich alles erledigen:

Code: Alles auswählen

In [51]: d = pd.read_table('test.txt', delimiter=' ', skipinitialspace=True, names=['a', 'b'], usecols=[0, 2])

In [52]: d
Out[52]: 
        a        b
0  11.673     5.10
1   7.700  1204.95
2  11.673     5.13
3   3.737   611.55
4   7.700  1204.95
5  11.673     5.18
6  11.674     5.10

In [53]: d.groupby('a').max()
Out[53]: 
              b
a              
3.737    611.55
7.700   1204.95
11.673     5.18
11.674     5.10
Antworten