如何替换具有匹配名称的列

时间:2016-07-06 17:43:00

标签: python pandas

我知道这可能很简单,但我无法弄清楚如何去做。

我有一个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

另外,我不想一个接一个地做,因为我有几个专栏。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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进行测试