Seite 1 von 1

pandas werte im df ersetzen aus zweitem df

Verfasst: Sonntag 13. Juni 2021, 15:05
von Tobias74
Hallo,
ich habe zwei Dataframes mit gleicher column und möchte die Werte im df durch die Werte im df1 ersetzen:

Code: Alles auswählen

import pandas as pd
df=pd.DataFrame({"Wert":[9,8,7,6,5,4] })
df1=pd.DataFrame({"Wert":[1,2,3] })
Wenn ich merge anwede erhalte ich zwei spalten:

Code: Alles auswählen

df = df.merge(df1, how='left', left_index=True, right_index=True)

Wert_x Wert_y
0 9 1.0
1 8 2.0
2 7 3.0
3 6 NaN
4 5 NaN
5 4 NaN

ich hätte aber gerne folgendes Ergebnis:

Wert
0 1
1 2
2 3
3 6
4 5
5 4

mit welcher Funktion oder welchem Parameter in der merge Funktion erreiche ich das?

Re: pandas werte im df ersetzen aus zweitem df

Verfasst: Sonntag 13. Juni 2021, 18:36
von Sirius3
Du willst ja nur einen Teil der Daten in `df` überschreiben:

Code: Alles auswählen

df['Wert'][:len(df1)] = df1['Wert']

Re: pandas werte im df ersetzen aus zweitem df

Verfasst: Sonntag 13. Juni 2021, 19:38
von Tobias74
Hi Sirius3,
für meine Anwendung funktioniert das leider nicht, das es vorkommen kann, dass der Index nicht fortlaufend ist.
Ich habe mein Beispiel mal angepasst um es zu verdeutlichen.

Code: Alles auswählen

import pandas as pd
df=pd.DataFrame({"Wert":[9,8,7,6,5,4], "Wert1":[0,1,0,1,0,1]  })
df1=df.loc[df['Wert1'] == 1, ["Wert"]] * 100
df:
Wert
0 9
1 8
2 7
3 6
4 5
5 4

df1
Wert
1 800
3 600
5 400

mit deinem Vorschlag erhält man:
df:
Wert
0 800
1 600
2 400
3 6
4 5
5 4


es müsste aber folgendes Ergebnis rauskommen:

Wert
0 9
1 800
2 7
3 600
4 5
5 400

Ich benötige eine Funktion, die den Index abgleicht und mit dem entsprechenden Wert aus dem zweiten df1 überschreibt.
Ich kann mir gar nicht vorstellen, dass es dafür keine Standardfunktion in pandas gibt. Sowas sollte doch nicht so ungewöhnlich sein.
Habe aber nichts gefunden.

viele Grüße

Re: pandas werte im df ersetzen aus zweitem df

Verfasst: Sonntag 13. Juni 2021, 19:57
von Sirius3
Dass der Index eine Rolle spielt, hast Du im ersten Post nicht geschrieben:

Code: Alles auswählen

df['Wert'][df1.index] = df1['Wert']

Re: pandas werte im df ersetzen aus zweitem df

Verfasst: Sonntag 13. Juni 2021, 20:16
von Tobias74
Mega!!! vielen Dank