Ich habe zwei Datenrahmen mit vielen Spalten df1, df2, und ich möchte alle df1-Werte (außer den Zeitspalten) durch die Daten aus df2-Spalten ersetzen, bei denen die Zeitwerte gleich sind:
df1:
index time x y ......many other columns ( the same as df2)
0 1 1 1
1 1.1 2 2
2 1.1 3 3
3 1.1 4 4
4 1.4 5 5
5 1.5 6 6
6 1.5 7 7
df2:
index time x y ....many other columns (the same as df1)
0 1 10 10
1 1.1 11 11
2 1.2 12 12
3 1.3 13 13
4 1.4 14 14
5 1.5 15 15
6 1.6 16 16
the result for df1 should be:
index time x y ....many other columns
0 1 10 10
1 1.1 11 11
2 1.1 11 11
3 1.1 11 11
4 1.4 14 14
5 1.5 15 15
6 1.5 15 15
Ich glaube, ich konnte mein Denken in Ordnung bringen und habe hoffentlich eine Lösung gefunden, die für Sie funktioniert.
Versuchen Sie dies, Sie können Ihre Antwort erhalten, indem Sie Folgendes verwenden combine_first
und einige Optimierungen vornehmen:
combine_first
Füllt Nullwerte aus einem anderen dataframe
, sodass Sie zuerst alle Werte (außer in der Spalte 'Zeit') durch ersetzen können np.nan
. Beachten Sie, dass ich die Spalte 'Zeit' als index
.
Da combine_first
die Vereinigung der beiden Datenrahmen zurückgegeben wird, können Sie isin
nur die Zeitwerte df1
in Ihrer endgültigen Ausgabe abrufen .
import numpy as np
import pandas as pd
df1[df1.columns.difference(['time'])] = np.nan
res = df1.set_index('time').combine_first(df2.set_index('time')).reset_index()
li = [i for i in df1['time'].unique()]
final= res[res['time'].isin(li)]
Welches wird Sie bekommen:
time x y
0 1.0 10.0 10.0
1 1.1 11.0 11.0
2 1.1 11.0 11.0
3 1.1 11.0 11.0
6 1.4 14.0 14.0
7 1.5 15.0 15.0
8 1.5 15.0 15.0
Probieren Sie es mit Ihrem aktuellen Datensatz aus und lassen Sie mich wissen, ob es funktioniert.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen