2016-07-06 23 views
2

Ich weiß, dass dies sehr einfach sein kann, aber ich kann nicht herausfinden, wie es geht.So ersetzen Sie Spalten mit passendem Namen

ich eine df mit mehreren Spalten habe ich ersetzen wollen, aber sagen wir mal ich ein df wie dieses:

df1: 

    A B 
0 a 22 
1 b 44 
2 c 100 
3 d 6 
4 e 12 

und ein anderes df

df2: 

    B 
0 11 
1 22 
2 50 
3 3 
4 6 

meine Wunsch df ist

df1: 

    A B 
0 a 11 
1 b 22 
2 c 50 
3 d 3 
4 e 6 

Auch ich will es nicht eins nach dem anderen tun, weil ich mehrere Spalten habe.

Antwort

4

Wenn Länge und Indizes sind gleiche beiden df:

df1['B'] = df2.B 

Wenn Bedarf nur Werte hinzufügen:

df1['B'] = df2.B.values 

Wenn mehrere Spalten ersetzen müssen:

df1 = pd.DataFrame({'A':[1,2,3], 
        'B':[3,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5]}) 

print (df1) 
    A B C D 
0 1 3 7 1 
1 2 5 8 3 
2 3 6 9 5 

df2 = pd.DataFrame({'A':[7,8,9], 
        'B':[1,6,5], 
        'C':[5,6,6], 
        'D':[7,3,6]}) 

print (df2) 
    A B C D 
0 7 1 5 7 
1 8 6 6 3 
2 9 5 6 6 

df1[['B', 'C', 'D']] = df2[['B', 'C', 'D']] 
print (df1) 
    A B C D 
0 1 1 5 7 
1 2 6 6 3 
2 3 5 6 6 
+0

Aber wie kann ich es für mehrere Spalten ohne sie eins nach dem anderen zu tun? –

+0

Verwenden Sie die Teilmenge 'df1 [['B', 'B1', 'B2']]] = df2 [['B', 'B1', 'B2']]' – jezrael

+0

So einfach. Das löst es! Ich habe viel zu lernen. Vielen Dank! –

2

Der Code unten ist grob, und könnte verbessert werden, aber sag mir, ob das was du zuerst willst. der Annahme, dass Sie einen Datenrahmen der Länge dem anderen überlegen haben:

def replace(dfa, dfb): 
    a_ = [match for match in df1.columns.values if match in df2.columns.values] 
    if len(dfa.columns) > len(dfb.columns): 
     for value in a_: 
      dfa[[value]] = dfb[[value]] 
    else: 
     for value in a_: 
      dfb[[value]] = dfb[[value]] 

Sie mit Ihrem df1 testen konnte und DF2

+0

Ok. Ich weiß, dass das sehr einfach sein könnte, aber hacke ich es an? Sorry, ich bin sehr neu zu Python –

+0

Kein Problem, fügen Sie einfach den obigen Code, und geben Sie ein: 'ersetzen (df1, df2)' wo df1 und df2 sind Ihre Datenframes, die Sie in Ihrer Frage angezeigt Post – Valilutzik

Verwandte Themen