Pandas结合了2个Dataframes和覆盖值

时间:2018-02-07 17:57:25

标签: python pandas

我已经研究过pandas join,merge,concat with different param values(how to join,indexing,axis = 1等)但是没有解决它!

我有两个数据帧:

error: ISO C90 does not support the ‘ll’ gnu_printf length modifier [-Werror=format=]

我希望合并到一个数据框,其中第2列和第3列中y的值覆盖x的值,然后在末尾插入第4列和第5列:

x = pd.DataFrame(np.random.randn(4,4))
y = pd.DataFrame(np.random.randn(4,4),columns=list(range(2,6)))


x
Out[67]: 
          0         1         2         3
0 -0.036327 -0.594224  0.469633 -0.649221
1  1.891510  0.164184 -0.010760 -0.848515
2 -0.383299  1.416787  0.719434  0.025509
3  0.097420 -0.868072 -0.591106 -0.672628

y
Out[68]: 
          2         3         4         5
0 -0.328402 -0.001436 -1.339613 -0.721508
1  0.408685  1.986148  0.176883  0.146694
2 -0.638341  0.018629 -0.319985 -1.832628
3  0.125003  1.134909  0.500017  0.319324

2 个答案:

答案 0 :(得分:1)

您可以尝试combine_first

df = y.combine_first(x)

答案 1 :(得分:1)

您需要updatecombine_first

x.update(y)
x.combine_first(y)
Out[1417]: 
          0         1         2         3         4         5
0 -1.075266  1.044069 -0.423888  0.247130  0.008867  2.058995
1  0.122782 -0.444159  1.528181  0.595939  0.155170  1.693578
2 -0.825819  0.395140 -0.171900 -0.161182 -2.016067  0.223774
3 -0.009081 -0.148430 -0.028605  0.092074  1.355105 -0.003027

或者你使用pd.concat + intersection

pd.concat([x.drop(x.columns.intersection(y.columns),1),y],1)
Out[1432]: 
          0         1         2         3         4         5
0 -1.075266  1.044069 -0.423888  0.247130  0.008867  2.058995
1  0.122782 -0.444159  1.528181  0.595939  0.155170  1.693578
2 -0.825819  0.395140 -0.171900 -0.161182 -2.016067  0.223774
3 -0.009081 -0.148430 -0.028605  0.092074  1.355105 -0.003027