2017-11-17 1 views
1

Es gibt 2 Datenrahmen, die unterschiedliche Spalten haben. Ich versuche, sie basierend auf den ersten 3 Spalten zu verketten.Wie verkettet man zwei Datenrahmen basierend auf den einzelnen Spalten?

a b c X 
1 H A 8 1 
2 M D 3 2 
3 H A 9 3 
4 L C 9 4 

    a b c Y 
1 H A 8 4 
2 M D 3 3 
3 H A 9 2 
4 L C 9 2 

Es ist das erwartete Ergebnis:

a b c X Y 
1 H A 8 1 4 
2 M D 3 2 3 
3 H A 9 3 2 
4 L C 9 4 2 

Ich kann keinen effizienten Weg finden, sie zu verketten !!

+0

Was ist die ineffiziente Methode, die Sie ausprobiert haben? – roganjosh

Antwort

1

denke ich merge sollte arbeiten schön:

df = pd.merge(df1, df2, on=['a','b','c']) 

Wenn dynamisch ersten 3 Spalten verwenden müssen:

print (df1.columns[:3].tolist()) 
['a', 'b', 'c'] 

df = pd.merge(df1, df2, on=df1.columns[:3].tolist()) 

print (df) 
    a b c X Y 
0 H A 8 1 4 
1 M D 3 2 3 
2 H A 9 3 2 
3 L C 9 4 2 

Aber wenn möglich ersten 3 Spalten unterscheiden sich in beiden DataFrame s und müssen beitreten von ihnen:

cols = df1.columns[:3].tolist() 
df2 = df2.rename(columns=dict(zip(df2.columns[:3], cols))) 
df = pd.merge(df1, df2, on=cols) 
0
  • wenn Ausgabe Reihenfolge keine Rolle spielt,
  • a, b, c sind gleiche für jede Zeile,
  • X & Y für jede Zeile verschieden.

LS1 = [set ([ 'H', 'A', 8,1]), eingestellt ([ 'H', 'A', 8,4])]
LS1 = set(). Union (* LS1)
Druck LS1
Satz ([ 'A', 1, 4, 8, 'H'])

0
new_df = pd.merge(df1, df2) 
print (new_df) 

output:-  a b c X Y 
      0 H A 8 1 4 
      1 M D 3 2 3 
      2 H A 9 3 2 
      3 L C 9 4 2 
+3

Bitte fügen Sie eine Erklärung hinzu. – mikep

Verwandte Themen