2016-07-06 80 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