2016-08-24 39 views
1

寻找方法来实现对数据帧以下更新:设置与扩大 - 更新交易DF

  • dfb是,我想dft交易来更新数据框基地。
  • 任何公共索引行都应该使用dft中的值进行更新。
  • 只有在dft中的索引应附加到dfb

看着文档,放大设置看起来很完美,但后来我意识到它只能用一行。是否可以使用放大设置来执行此更新或者是否有其他方法可以推荐?

dfb = pd.DataFrame(data={'A': [11,22,33], 'B': [44,55,66]}, index=[1,2,3]) 
dfb 
Out[70]: 
    A B 
1 11 44 
2 22 55 
3 33 66 

dft = pd.DataFrame(data={'A': [0,2,3], 'B': [4,5,6]}, index=[3,4,5]) 
dft 
Out[71]: 
    A B 
3 0 4 
4 2 5 
5 3 6 

# Updated dfb should look like this: 
dfb 
Out[75]: 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6 

回答

1

您可以使用combine_first与重命名列,最后由astype转换floatint

dft = dft.rename(columns={'c':'B', 'B':'A'}).combine_first(dfb).astype(int) 
print (dft) 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6 

另一种解决方案与Index.intersection两个DataFrames找到相同的指标,drop从第一DataFramedfb和然后使用concat

dft = dft.rename(columns={'c':'B', 'B':'A'}) 
idx = dfb.index.intersection(dft.index) 
print (idx) 
Int64Index([3], dtype='int64') 

dfb = dfb.drop(idx) 
print (dfb) 
    A B 
1 11 44 
2 22 55 

print (pd.concat([dfb, dft])) 
    A B 
1 11 44 
2 22 55 
3 0 4 
4 2 5 
5 3 6