如何为Pandas差异DataFrame添加原数据来源标识列?
为差异数据标记原DataFrame归属
现有两个DataFrame:当前预估数据df_current_est和历史预估数据df_previous_est,各约600行。原代码通过外连接筛选出差异行,但未标记每行所属的原DataFrame,修改方法如下:
修改后的代码
merged_df = pd.merge(df_current_est, df_previous_est, how='outer', indicator=True) changed_df = merged_df[merged_df['_merge'] != 'both'].copy() # 新增标记列,映射原DataFrame名称 changed_df['Source'] = changed_df['_merge'].map({ 'left_only': 'df_current_est', 'right_only': 'df_previous_est' }) # 清理不必要的列并整理结构 changed_df.drop('_merge', axis=1, inplace=True) changed_df.reset_index(drop=True, inplace=True) changed_df = changed_df.sort_values(by='EstimateID', ascending=True) print(changed_df)
说明
pd.merge的indicator=True会自动生成_merge列,其中:left_only表示该行仅来自左表df_current_estright_only表示该行仅来自右表df_previous_est
- 用
map函数将_merge的取值映射为原DataFrame的名称,生成Source标记列 - 最后删除冗余的
_merge列,完成数据整理
示例输出
修改后输出会新增Source列,示例如下:
EstimateID Season RPIN GrowMethodCode Variety_code Packout_pc QtyBins Source 0 10061 2023 R1000 FO 002 0.60 320 df_current_est 1 10061 2023 R1000 FO 002 0.60 9000 df_previous_est 2 10062 2023 R2000 FO 068 0.76 1000 df_current_est 3 10062 2023 R2000 FO 068 0.76 90000 df_previous_est
内容的提问来源于stack exchange,提问作者opperman.eric
相关产品推荐
相关产品推荐

