如何基于DataFrame的Code列唯一值拆分子表并按原顺序合并回原表
实现方案
第一步:按Code拆分DataFrame
直接用groupby生成按唯一Code映射的子DataFrame字典,完全满足你拆分出对应编码子表的需求:
import pandas as pd # 你的示例DataFrame df = pd.DataFrame({ 'Quantity': [1757, 1100, 2500, 323, 800], 'Code': ['08951201', '08A85800', '08A85800', '08951201', '08A85800'], 'Value': [717.0, 0.0, 0.0, 0.0, 0.0] }) # 拆分得到各编码对应的子DF字典,键是Code值,值是对应子DF code_df_dict = {code: group for code, group in df.groupby('Code')} # 按编码取子DF的示例 df1 = code_df_dict['08951201'] # 所有08951201的行 df2 = code_df_dict['08A85800'] # 所有08A85800的行
第二步:处理子表后按原始顺序合并
核心逻辑是保留原始行的索引,拆分后的子表会继承原DF的行索引,处理子表时不要修改索引,合并后按索引排序即可完全恢复原始顺序:
# 这里是你对各个子DF的数值计算逻辑,示例:给df1的Value列加100 code_df_dict['08951201']['Value'] = code_df_dict['08951201']['Value'] + 100 # 合并所有处理后的子DF,再按索引升序排序恢复原始顺序 final_df = pd.concat(code_df_dict.values()).sort_index()
备选稳妥方案(防止处理子表时改动索引)
如果你的处理逻辑需要重置子表索引,可以提前把原始顺序存为单独的列,合并后按该列排序即可:
# 拆分前先存原始顺序列 df['original_order'] = df.index # 后续拆分、处理逻辑不变 code_df_dict = {code: group for code, group in df.groupby('Code')} # 子表处理... # 合并后按原始顺序列排序,再删掉辅助列 final_df = pd.concat(code_df_dict.values()).sort_values('original_order').drop('original_order', axis=1)
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

