我有 2 个 Pandas dfs,A 和 B。它们都有 10 列和索引“ID”。如果 A 和 B 的 ID 匹配,我想用 A 的行替换 B 的行。我尝试使用 pd.update,但还没有成功。任何帮助表示赞赏。
原文由 Chris Parry 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有 2 个 Pandas dfs,A 和 B。它们都有 10 列和索引“ID”。如果 A 和 B 的 ID 匹配,我想用 A 的行替换 B 的行。我尝试使用 pd.update,但还没有成功。任何帮助表示赞赏。
原文由 Chris Parry 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以清空 A 中的目标单元格(通过将它们设置为 NaN)并使用 combine_first()
方法用 B 的值填充这些单元格。虽然这听起来可能违反直觉,但这种方法使您可以灵活地在 2 行代码中同时定位目标行和特定列。希望有所帮助。
替换具有索引匹配的完整行的示例:
# set-up
cols = ['c1','c2','c3']
A = pd.DataFrame(np.arange(9).reshape((3,3)), columns=cols)
B = pd.DataFrame(np.arange(10,16).reshape((2,3)), columns=cols)
#solution
A.loc[B.index] = np.nan
A = A.combine_first(B)
仅替换具有索引匹配的行的某些目标列的示例:
A.loc[B.index, ['c2','c3']] = np.nan
A = A.combine_first(B)
原文由 fpersyn 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答873 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
下面的代码应该可以解决问题
输出
从评论编辑:
要替换整行而不是仅替换某些列: