python - 如何更改多列中的重复名称?
问题描述
我有这个df:
CODIGO NOMBRE Enero Enero Febrero Febrero Marzo Marzo ....
000130 RICA PLAYA 31.3 21.0 31.7 22.0 31.8 22.0
000132 PUERTO PIZARRO 32.5 19.0 32.2 18.0 32.5 17.0
000134 PAPAYAL 31.7 25.0 31.5 27.0 31.8 26.0
000135 EL SALTO 31.1 27.0 31.5 26.0 31.5 26.0
000136 CAÑAVERAL 32.4 17.0 32.0 16.0 32.3 16.0
... ... ... ... ... ...
158317 SUSAPAYA 17.3 20.0 16.8 20.0 17.2 19.0
158321 PALCA 17.9 16.0 17.8 17.0 18.4 16.0
158323 TALABAYA 17.1 12.0 16.7 12.0 17.2 12.0
158326 CAPAZO 13.7 19.0 13.6 19.0 13.5 17.0
158328 PAUCARANI 13.1 15.0 12.9 15.0 13.4 14.0 ....
有 26 列。
我想将第二个 Enero 重命名为 N1,将第二个 Febrero 重命名为 N2,将第二个 Marzo 重命名为 N3,等等,如下所示:
CODIGO NOMBRE Enero N1 Febrero N2 Marzo N3 ....
000130 RICA PLAYA 31.3 21.0 31.7 22.0 31.8 22.0
000132 PUERTO PIZARRO 32.5 19.0 32.2 18.0 32.5 17.0
000134 PAPAYAL 31.7 25.0 31.5 27.0 31.8 26.0
000135 EL SALTO 31.1 27.0 31.5 26.0 31.5 26.0
000136 CAÑAVERAL 32.4 17.0 32.0 16.0 32.3 16.0
... ... ... ... ... ...
158317 SUSAPAYA 17.3 20.0 16.8 20.0 17.2 19.0
158321 PALCA 17.9 16.0 17.8 17.0 18.4 16.0
158323 TALABAYA 17.1 12.0 16.7 12.0 17.2 12.0
158326 CAPAZO 13.7 19.0 13.6 19.0 13.5 17.0
158328 PAUCARANI 13.1 15.0 12.9 15.0 13.4 14.0 ....
所以我做了:
df.columns['CODIGO','NOMBRE','Enero','N1','Febrero','N2'...... etc etc]
有没有比写每个名字更有效或更快的方法?
解决方案
假设重复值的顺序正确,可以通过修改wherevalues
来替换它们:columns
duplicated
m = df.columns.duplicated()
df.columns.values[m] = [f'N{i}' for i in range(1, 1 + m.sum())]
或使用arange
and Series
:
import numpy as np
df.columns.values[m] = 'N' + pd.Series(np.arange(1, 1 + m.sum()), dtype=str)
或与cumsum
:
df.columns.values[m] = 'N' + pd.Series(m.cumsum()[m], dtype=str)
import pandas as pd
df = pd.DataFrame(columns=['CODIGO', 'NOMBRE', 'Enero', 'Enero',
'Febrero', 'Febrero', 'Marzo', 'Marzo'])
print('Before', df)
m = df.columns.duplicated()
df.columns.values[m] = [f'N{i}' for i in range(1, 1 + m.sum())]
print('After', df)
Before Empty DataFrame
Columns: [CODIGO, NOMBRE, Enero, Enero, Febrero, Febrero, Marzo, Marzo]
Index: []
After Empty DataFrame
Columns: [CODIGO, NOMBRE, Enero, N1, Febrero, N2, Marzo, N3]
Index: []
推荐阅读
- asp.net - ASP .NET Core 3.1 登录构造函数返回 NULL。登录属性未绑定到 JsonApiDotNetCore 的 Post 请求
- c# - C#:y 轴速度随时间增加
- php - Cloudflare php cURL 获取返回“1”
- unity3d - (Unity 3D C#) 传送带物理
- c# - 为什么使用 Ajax 将参数传递给 ASP.NET Core 中的控制器始终为 NULL?
- jquery - 下拉问题中的 JQuery replaceWith()
- r - 安装 MSA 包时依赖项 gtools 不可用
- go - 为什么我不能通过同时计算切片的不同部分来加速我的程序?
- r - 将 X 列添加到 data.frame
- r - 如何将 table() 与 dplyr group by、从 purrr 映射和数据帧/小标题列表一起使用?(在 R 中)