如何使用另一个DataFrame替换pandas DataFrame末尾的指定条数数据
可行实现方案
你要的效果可以通过切片+拼接直接实现,无需用update方法,核心逻辑是截取df前半部分保留内容,再拼接df2的替换内容即可:
单用户场景(即你给出的示例场景)
import pandas as pd # 你的原始数据 df = pd.DataFrame({'user': ['A', 'A', 'A', 'A', 'A'], 'results': ['Rick', 'Patram', 'Pulis', 'Marie', 'Landon' ]}) df2 = pd.DataFrame({'user': ['A', 'A', 'A'], 'results': ['John', 'Peter', 'Anne']}) # 核心执行代码 df = pd.concat([ # 保留df前N行,N = 原df总长度 - df2的长度 df.iloc[:len(df) - len(df2)], df2 ], ignore_index=True)
执行后得到的df就和你给出的预期结果完全一致。
多用户分组更新场景
如果你实际数据中存在多个不同user,需要按用户维度分别执行更新,可使用分组处理方案:
def update_single_user(group, df2_group_dict): current_user = group.name # 取当前用户对应的df2替换数据 replace_part = df2_group_dict.get(current_user, pd.DataFrame(columns=group.columns)) # 计算需要保留的当前用户前半部分行数 keep_row_num = len(group) - len(replace_part) return pd.concat([group.iloc[:keep_row_num], replace_part], ignore_index=True) # 先把df2按user分组存储为字典,方便查询 df2_group_dict = dict(tuple(df2.groupby('user'))) # 按user分组更新后合并结果 df = df.groupby('user', group_keys=False).apply(update_single_user, df2_group_dict=df2_group_dict)
内容的提问来源于stack exchange,提问作者isaac.af95
相关产品推荐
相关产品推荐

