如何在DataFrame处理后恢复原始顺序并修改unit列命名
问题:恢复DataFrame原始顺序并重新命名unit列
核心诉求:保留数据的原始顺序,同时将unit列按原始序列命名为unit01、unit02……格式,仅修改unit列名称。
原始DataFrame
name unit col1 col2 ----[0] 01 1.72 3.87 ----[0] 02 1.34 4.55 ----[0] 03 6.25 6.55 ----[0] 01 7.94 7.22 ----[0] 02 5.07 5.10 ----[0] 03 3.39 2.66 ----[1] 01 4.62 6.27 ----[1] 02 5.34 5.45 ----[1] 03 9.95 2.95 ----[1] 01 3.94 1.82 ----[1] 02 2.47 3.50 ----[1] 03 2.39 0.76 ... ... ... ... ----[6] 01 0.34 0.15 ----[6] 02 6.25 6.25 ----[6] 03 3.65 5.65 ----[6] 01 1.74 4.32 ----[6] 02 2.67 6.52 ----[6] 03 8.99 5.76
导致顺序打乱的处理代码
执行以下代码后,DataFrame顺序被打乱,且unit列按name分组编号,不符合需求:
df = df.sort_values(by=["name"], ascending=False) df['unit'] = 'unit' +df.groupby('name').cumcount().add(1).astype(str).str.zfill(2)
解决方案
要恢复原始顺序并正确生成unit列,关键是先记录原始数据的顺序标记,再基于标记恢复顺序并重新编号:
情况1:未执行错误代码(从原始数据开始处理)
直接基于原始行顺序生成unit列,无需排序:
# 按原始数据的行顺序生成unit列,从unit01开始递增 df['unit'] = 'unit' + (df.reset_index(drop=True).index + 1).astype(str).str.zfill(2)
情况2:已执行错误代码,需恢复原始顺序
如果已执行错误代码且无原始数据备份,可通过索引或预设标记恢复:
- 若原始索引为连续序列,直接按索引排序:
# 按原始索引恢复顺序 df = df.sort_index() # 重新生成unit列 df['unit'] = 'unit' + (df.reset_index(drop=True).index + 1).astype(str).str.zfill(2)
- 若原始索引不连续,建议处理前先添加顺序标记(如果没加只能依赖备份):
# 处理前先添加原始顺序标记 df['original_order'] = range(len(df)) # 执行打乱操作后,按标记恢复顺序 df = df.sort_values(by='original_order').drop('original_order', axis=1) # 生成unit列 df['unit'] = 'unit' + (df.reset_index(drop=True).index + 1).astype(str).str.zfill(2)
期望结果
处理后的数据将保留原始顺序,unit列按序列编号:
name unit col1 col2 ----[0] unit01 1.72 3.87 ----[0] unit02 1.34 4.55 ----[0] unit03 6.25 6.55 ----[0] unit04 7.94 7.22 ----[0] unit05 5.07 5.10 ----[0] unit06 3.39 2.66 ... ... ... ...
内容的提问来源于stack exchange,提问作者888Seeme
相关产品推荐
相关产品推荐

