Angenommen, ich habe zwei Datenrahmen:subtrahieren Pandas Datenrahmen während verlassen einige Spalten intakt
data1 = """
idx, stat, val
1, 1, 5
2, 1, 10
3, 2, 15
4, 3, 20
"""
data2 = """
idx, stat, val
2, 1, 8
4, 5, 16
"""
(leider - ich weiß nicht, wie dies in Pandas leicht zu codieren - ich würde sie in von csv im wirklichen Leben lesen).
Ich möchte diese beiden Datenfelder subtrahieren, so dass nur die val-Spalte subtrahiert wird (in der Realität sind dies Stationskoordinaten). Das Ergebnis sollte NaN sein, wenn nur einer der beiden Datenfelder den jeweiligen Indexwert hat (Spalte idx im ASCII-Format). Auch ok, wenn nicht übereinstimmende Zeilen sofort entfernt werden (ich würde sowieso danach dropna aufrufen).
Daher wäre mein gewünschtes Ergebnis sein:
desired = """
idx, stat, val
1, 1, NaN
2, 1, 2
3, 2, NaN
4, 3, 4
"""
Grundsätzlich data1.sub(data2)
funktioniert gut - außer dass ich nicht einen Weg sehen kann, wie die Statistikspalte aus der Subtraktion zu „schützen“. Ich habe auch versucht data1.sub(data2['val'], axis=0)
, aber dies vermasselt die Zeilenabgleichung, die automatisch in data1.sub(data2)
durchgeführt wird. Eine Umgehungslösung besteht darin, die stat-Spalte (n) nachträglich durch die ursprünglichen Werte von data1
zu ersetzen, was jedoch ziemlich plump erscheint.