Seite 1 von 1
Dataframes kombinieren
Verfasst: Freitag 22. Januar 2021, 20:34
von OrangeZebra
Hallo
Ich möchte df1 mit Werten aus df2 anreichern, wenn keine eingegeben wurden. Beispiel:
df1 = pd.DataFrame(
... {
... "key": ["a", "c", "e", "a", "c", "e"],
... "value": [1, 2, 3, np.nan, 2, 3],
... "value2": [11, 12, 13, 14, 15, 16]
... })
df2 enthält die Stammdaten:
df2 = pd.DataFrame(
... {
... "key": ["a", "b","c", "d", "e", "f"],
... "ref_value": [100, 200, 300, 400, 500, 600]
... })
Am Ende soll df1 wie folgt aussehen:
... "key": ["a", "c", "e", "a", "c", "e"],
... "value": [1, 2, 3, 100, 2, 3],
... "value2": [11, 12, 13, 14, 15, 16]
Wie mach' ich das? mit Merge, join und co komm' ich noch nicht so klar...
Vielen Dank!
Re: Dataframes kombinieren
Verfasst: Freitag 22. Januar 2021, 22:25
von Bl3nder
Code: Alles auswählen
import pandas as pd
import numpy as np
dict1 = {
"key": ["a", "c", "e", "a", "c", "e"],
"value": [1, 2, 3, np.nan, 2, 3],
"value2": [11, 12, 13, 14, 15, 16]
}
# df2 enthält die Stammdaten:
dict2 ={
"key": ["a", "b", "c", "d", "e", "f"],
"ref_value": [100, 200, 300, 400, 500, 600]
}
df1 = pd.DataFrame.from_dict(dict1)
df2 = pd.DataFrame.from_dict(dict2)
df1 = pd.concat([df2,df1],axis=1,ignore_index=True)
print(df1)
Ausgabe :
So hättest du keine doppelten Werte
Code: Alles auswählen
0 1 2 3 4
0 a 100 a 1.0 11
1 b 200 c 2.0 12
2 c 300 e 3.0 13
3 d 400 a NaN 14
4 e 500 c 2.0 15
5 f 600 e 3.0 16
Hier hast du zwar alle werte jedoch auch doppelte ....
df1 = df1.merge(df2, how='right')
Re: Dataframes kombinieren
Verfasst: Sonntag 24. Januar 2021, 09:49
von OrangeZebra
Vielen Dank
So ganz geschieht noch nicht, was ich gern hätte. Aber vielleicht habe ich die Aufgabe etwas unklar formuliert, drum versuche ich's nochmals:
Ich habe ein df, aus xls importiert, mehrere 1000 Zeilen:
DataFrame1:
key value1 value 2..n
a 1 11
c 2 12
e 3 13
a nan 14
c 2 15
e 3 16
Mit Hilfe von DataFrame2 (auch ein XLS-Import) möchte ich df1 komplettieren
DataFrame2 sieht wie folgt aus:
key ref_value
a 100
b 200
c 300
d 400
e 500
In df 1 sollen nan in value1 mit dem in df2 bei key ref_value komplettiert werden.
Entsprechend soll mein Ziel-Dataframe vor der weiteren Auswertung wie folgt aussehen:
key value1 value 2..n
a 1 11
c 2 12
e 3 13
a 100 14
c 2 15
e 3 16
Ich habe schon verschiedenes versucht (merge, join, ordered_merge), zum Teil hat es halb funktioniert (was ich wirklich tat, weiss ich nicht so recht...), es gab dann Spalten value1_x und value1_y. Details habe ich auf meinem Firmen-Rechner, kann ich morgen nachliefern.
Vielen Dank für eure Hilfe
Gruss
Stephan
Re: Dataframes kombinieren
Verfasst: Sonntag 24. Januar 2021, 15:49
von Bl3nder
gelöscht
Re: Dataframes kombinieren
Verfasst: Sonntag 24. Januar 2021, 16:55
von Bl3nder
Sorry in dem anderen Code war ein Bug....
Ich gehe davon aus das nur die NAN Werte ersetzt werden sollen mit einem anderen Dataframe der gleich groß ist ( weil zum Beispiel der Index Datum etc dastellt ... )
Nochmal der Versuch:
Code: Alles auswählen
import pandas as pd
import numpy as np
df = pd.DataFrame({1: [10, np.nan, 12, 13, np.nan], 2: [100, 110, 120, 130, 140]})
df1 = pd.DataFrame({1: [1, 2, 3, 4, 5]})
test = [1, 2]
for index in df.index:
if pd.isna(df[1].iloc[index]):
# df.loc[index,1] = test[cnt]
df.loc[index, 1] = df1.loc[index, 1]
print(df)
Vorher:
Code: Alles auswählen
1 2
0 10.0 100
1 NaN 110
2 12.0 120
3 13.0 130
4 NaN 140
Nachher:
Code: Alles auswählen
1 2
0 10.0 100
1 2.0 110
2 12.0 120
3 13.0 130
4 5.0 140
Jedoch weiß Ich nicht wie sich das bei langen Datensätzen verhält ... kannst du ja mal ausprobieren und dich wieder melden
Re: Dataframes kombinieren
Verfasst: Mittwoch 27. Januar 2021, 05:16
von Bl3nder
Guck sonst auch mal nach Pandas Update ( das ist eine Funktion die glaube ich sogar genau das macht was du möchtest )