设置扩大 - 更新事务DF

时间:2016-08-24 11:10:28

标签: python pandas dataframe multiple-columns insert-update

寻找在数据框架上实现以下更新的方法:

  • 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 个答案:

答案 0 :(得分:1)

您可以使用combine_first重命名列,最后将float列转换为int astype

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 drop的两个数据框中找到相同的索引,concat从第一个DataFrame dfb找到,然后使用{{3}}:

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