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 )