pandas werte im df ersetzen aus zweitem df

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Tobias74
User
Beiträge: 10
Registriert: Montag 4. Mai 2020, 20:36

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?
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst ja nur einen Teil der Daten in `df` überschreiben:

Code: Alles auswählen

df['Wert'][:len(df1)] = df1['Wert']
Tobias74
User
Beiträge: 10
Registriert: Montag 4. Mai 2020, 20:36

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
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass der Index eine Rolle spielt, hast Du im ersten Post nicht geschrieben:

Code: Alles auswählen

df['Wert'][df1.index] = df1['Wert']
Tobias74
User
Beiträge: 10
Registriert: Montag 4. Mai 2020, 20:36

Mega!!! vielen Dank
Antworten