如何按周期重命名DataFrame列名(避免重复列名)
解决方案
直接通过分组遍历列名的方式实现重命名,代码如下:
import pandas as pd # 原始DataFrame构造 df = pd.DataFrame() df['id'] = [1] df['v0'] = [2] df['v1'] = [1] df['v2'] = [2] df['v3'] = [1] df['v4'] = [2] df['v5'] = [1] df['v6'] = [2] df['v7'] = [1] df['v8'] = [2] df['v9'] = [1] df['v10'] = [2] df['v11'] = [1] df['v12'] = [2] df['v13'] = [1] df['v14'] = [2] # 提取需要重命名的列(排除id) value_cols = [col for col in df.columns if col != 'id'] new_columns = ['id'] # 保留id列 # 每3列一组处理 for group_idx in range(0, len(value_cols), 3): # 取出当前组的3列 group_cols = value_cols[group_idx:group_idx+3] # 生成新列名:v{组号}{0/1/2},比如组0是v00、v01、v02,组1是v10、v11、v12 group_num = group_idx // 3 new_names = [f"v{group_num}{i}" for i in range(3)] new_columns.extend(new_names) # 重命名DataFrame列 df.columns = new_columns print(df)
代码解释
- 先提取除
id外的所有需要重命名的列,避免修改id列。 - 通过
range(0, len(value_cols), 3)实现每3列一组的遍历,group_idx是每组起始列的索引。 - 每组的编号
group_num由group_idx // 3得到,比如第0-2列对应组0,第3-5列对应组1,以此类推。 - 对每组内的3列,生成格式为
v{组号}{0/1/2}的新列名,确保列名唯一且符合需求。 - 最后将新列名列表赋值给
df.columns完成重命名。
运行后输出结果与期望完全一致:
id v00 v01 v02 v10 v11 v12 v20 v21 v22 v30 v31 v32 v40 v41 v42 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

