2016-07-06 79 views
2

我知道這可能很簡單,但我不知道如何去做。如何替換匹配名稱的列

我有幾個列我想替換DF,但可以說我有一個這樣的DF:

df1: 

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

而另一DF

df2: 

    B 
0 11 
1 22 
2 50 
3 3 
4 6 

我的期望df是

df1: 

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

另外,我不想一個接一個地做,因爲我有幾列。

回答

4

如果長度和索引相同的兩個df的:

df1['B'] = df2.B 

如果只需要添加值:

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

如果需要更換多個列:

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

測試,但我怎麼能做到這一點的幾列,而不做一個接一個? –

+0

使用子集'df1 [['B','B1','B2']] = df2 [['B','B1','B2']]' – jezrael

+0

這麼簡單。這解決了它!我有很多要學習的。謝謝! –

2

下面的代碼是粗糙的,可以改進,但告訴我,如果你想第一次。 假設你有一個數據幀的長度優於其他:

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]] 

你可以與你的DF1和DF2

+0

好的。我知道這可能是非常基本的,但鋤頭我應用它? 對不起,我對python –

+0

很新鮮沒問題,只要粘貼上面的代碼,然後輸入:'replace(df1,df2)',其中df1和df2是您在問題中顯示的數據框 – Valilutzik