设置放大 - 更新事务 DF
Setting with enlargement - updating transaction 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
您可以使用 combine_first
with renaming columns, last convert float
columns to int
by 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
it from first DataFrame
dfb
and then use concat
在两个DataFrame中找到相同索引的另一种解决方案:
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
寻找在数据帧上实现以下更新的方法:
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
您可以使用 combine_first
with renaming columns, last convert float
columns to int
by 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
it from first DataFrame
dfb
and then use concat
在两个DataFrame中找到相同索引的另一种解决方案:
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