Ich versuche etwas zu tun, von dem ich denke, dass es ein Einzeiler sein sollte, aber ich kämpfe darum, es richtig zu machen.Pandas: Kleine Datenframes in große zusammenfassen, mit kleinen überschreiben
Ich habe einen großen Datenrahmen, wir nennen ihn lg
, und einen kleinen Datenrahmen, nennen wir es sm
. Jeder Datenrahmen hat eine start
und eine end
Spalte, und mehrere andere Spalten , die alle identisch sind zwischen den beiden Datenrahmen (der Einfachheit halber nennen wir alle diese Spalten type
). Manchmal haben sm
die gleiche start
undend
als lg
, und wenn das der Fall ist, möchte ich sm
s type
‚s type
lg
zu überschreiben‘.
Hier ist das Setup:
lg = pd.DataFrame({'start':[1,2,3,4], 'end':[5,6,7,8], 'type':['a','b','c','d']})
sm = pd.DataFrame({'start':[9,2,3], 'end':[10,6,11], 'type':['e','f','g']})
... beachten Sie, dass die einzige passende ['start','end']
Combo ['2','6']
Meine gewünschte Ausgabe ist:
start end type
0 1 5 a
1 2 6 f # where sm['type'] overwrites lg['type'] because of matching ['start','end']
2 3 7 c
3 3 11 g # where there is no overwrite because 'end' does not match
4 4 8 d
5 9 10 e # where this row is added from sm
Ich habe versucht, mehrere Versionen von .merge()
, merge_ordered()
, usw., aber ohne Erfolg. Ich habe es tatsächlich mit merge_ordered()
und drop_duplicates()
arbeiten lassen, nur um zu erkennen, dass es einfach das Duplikat fallen ließ, das früher im Alphabet war, nicht, weil es von sm
war.
wusste ich etwas einfach fehlte. Vielen Dank! – pshep123
Gern geschehen, froh, dass es für Sie funktioniert. – Psidom