python - Pandas 如何在不影响其他列的情况下替换某些列中的所有行?
问题描述
我有一个带有 abcde 列的主数据框(df_a)。我有第二个数据框(df_b),其中包含更新 abc 列中的值的新信息。
最小的可重现代码:
df_a = pd.DataFrame(data={
'a': [1, 0, 0, 0, 0, 0],
'b': [2, 0, 0, 0, 0, 0],
'c': [3, 0, 0, 0, 0, 0],
'd': ['foo', 'foo', 'foo', 'foo', 'foo', 'foo'],
'e': ['bar','bar','bar','bar','bar','bar']
})
df_b = pd.DataFrame(data={
'a': [1, 0, 2, 0, 0, 0],
'b': [2, 0, 2, 0, 0, 0],
'c': [3, 0, 2, 0, 0, 0]
})
df_a:
a b c d e
0 1 2 3 foo bar
1 0 0 0 foo bar
2 0 0 0 foo bar
3 0 0 0 foo bar
4 0 0 0 foo bar
5 0 0 0 foo bar
df_b:
a b c
0 1 2 3
1 0 0 0
2 2 2 2
3 0 0 0
4 0 0 0
5 0 0 0
Desired output:
df_a_new:
a b c d e
0 1 2 3 foo bar
1 0 0 0 foo bar
2 2 2 2 foo bar
3 0 0 0 foo bar
4 0 0 0 foo bar
5 0 0 0 foo bar
索引总是相同的,所以我通常只对单列使用 map(),但在我的实际数据集中,我必须更新 50 列,而且效率不高。
解决方案
通用解决方案如下所示:
要么找到列的差异,df_a
然后df_b
将它们分配给df_b
df_b.assign(**df_a.loc[:,df_a.columns.difference(df_b.columns,sort=False)])
或者另一种方式:
df_b.combine_first(df_a)
推荐阅读
- api - 通过 API 从 Survey Monkey 获取 NPS
- html - Open Graph 数据不显示在 Discord 上
- r - 如何根据高度美学在ggridges中填充颜色?
- mysql - 如果 5+ 或更多连续小时且值低于 0,则 SQL 设置为 TRUE
- java - 如何在 Spring 安全配置中检查 OAuth2 客户端 ID?
- css - Angular:页面上的垫子菜单项太多
- swift - 当我键入 AF.request 时,什么都没有显示,但 Alamofire.request 正在工作,但 .GET 功能仍然没有显示出来。我如何解码数据
- c# - 使用冒号(:) 连接嵌套对象字段名称
- python - 在不使用熊猫的情况下在另一个数组中查找一个数组的元素索引的有效方法
- bloom-filter - 为什么布隆过滤器没有像 count-min 草图那样实现?