You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中重置索引计数(保留每个索引对应的多行结构)

解决Pandas DataFrame重置重复索引列名序号的问题

我来帮你搞定这个需求!你需要把DataFrame中重复出现的数值型列名替换成从1开始的连续序号,同时完全保留原有的列结构(数值列和标签列交替的形式)。下面是具体的实现方法:

步骤说明

  1. 提取所有重复的数值列名,生成“唯一值→连续序号”的映射字典;
  2. 遍历原列名列表,将数值列名替换为对应序号,非数值列名保持不变;
  3. 把新列名列表赋值给DataFrame,完成修改。

代码示例

假设你的原DataFrame模拟结构如下:

import pandas as pd

# 模拟原DataFrame数据
data = [['Alice', 10, 'val1', 10, 'val2', 20, 'val3', 20, 'val4', 30, 'val5', 30, 'val6', 40, 'val7']]
df = pd.DataFrame(data, columns=['Name', 1234, 'AA', 1234, 'AB', 1235, 'BA', 1235, 'BB', 1236, 'CA', 1236, 'CB', 1237, 'DA'])

执行以下代码完成列名替换:

# 获取原列名列表
cols = df.columns.tolist()

# 提取所有数值型列名(排除'Name'),并筛选唯一值(按数值大小排序)
unique_numeric_cols = sorted(list(set([col for col in cols if col != 'Name' and str(col).isdigit()])))

# 创建映射:原数值 → 连续序号(从1开始)
num_to_seq = {num: idx + 1 for idx, num in enumerate(unique_numeric_cols)}

# 生成新的列名列表
new_columns = []
for col in cols:
    if col in num_to_seq:
        new_columns.append(num_to_seq[col])
    else:
        new_columns.append(col)

# 替换DataFrame的列名
df.columns = new_columns

执行后就能得到你期望的结构:

Name1AA1AB2BA2BB3CA3CB4DA
Alice10val110val220val320val430val530val640val7

补充说明

  • 如果数值列名是字符串类型(比如'1234'而非整数1234),这段代码同样适用,str(col).isdigit()能兼容两种类型;
  • 若希望序号按原数值首次出现顺序排序(而非数值大小),可以去掉sorted(),改用dict.fromkeys()保留顺序:
    unique_numeric_cols = list(dict.fromkeys([col for col in cols if col != 'Name' and str(col).isdigit()]))
    

内容的提问来源于stack exchange,提问作者rekeson21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:57:29