如何基于相同username用新DataFrame替换旧DataFrame的loan_balance值
最优实现方法
直接使用 pandas 内置的 update() 方法即可高效完成需求,该方法专门针对「基于匹配键更新指定列」的场景,代码简洁且性能优异(基于向量化操作,远快于循环遍历)。
具体步骤与代码
import pandas as pd # 原始数据 old_data_df = pd.DataFrame({ 'username': ['username1', 'username7'], 'loan_balance': [10, 14], 'age': [18, 8] }) new_data_df = pd.DataFrame({ 'username': ['username1', 'username2'], 'loan_balance': [1, 4] }) # 1. 将 username 设置为索引,确保按用户名匹配更新 old_data_df = old_data_df.set_index('username') new_data_df = new_data_df.set_index('username') # 2. 执行更新:仅替换匹配到的 username 对应的 loan_balance 值 old_data_df.update(new_data_df) # 3. 恢复原有的整数索引(可选,若不需要保留 username 为索引则执行) old_data_df = old_data_df.reset_index() print(old_data_df)
输出结果
username loan_balance age 0 username1 1.0 18 1 username7 14.0 8
方法说明
update()会原地修改 old_data_df,仅更新两个 DataFrame 中索引(此处为 username)匹配的行;- 仅更新 new_data_df 中存在的列(即
loan_balance),old_data_df 中的其他列(如age)完全不受影响; - new_data_df 中不存在的 username(如
username7)对应的行不会被改动; - 若不需要原地修改,可以先复制 old_data_df 再操作:
updated_df = old_data_df.set_index('username').copy(); updated_df.update(new_data_df.set_index('username'))。
内容的提问来源于stack exchange,提问作者Fredy
相关产品推荐
相关产品推荐

