首页 > 解决方案 > 在 Pandas 中按顺序重命名重复的列名

问题描述

我有一个数据框 df,我想在其中按连续顺序重命名两个重复的列:

数据

DD  Nice Nice Hello
0   1    1    2

期望的

DD  Nice1 Nice2 Hello
0   1     1     2

正在做

df.rename(columns={"Name": "Name1", "Name": "Name2"})

但是,我正在运行该rename函数,因为两个列名相同,因此结果不可取。

标签: pythonpandasnumpy

解决方案


您可以使用itertools.count()计数器和列表表达式来创建新的列标题,然后将它们分配给数据框。

例如:

>>> import itertools
>>> df = pd.DataFrame([[1, 2, 3]], columns=["Nice", "Nice", "Hello"])
>>> df
   Nice  Nice  Hello
0     1     2      3
>>> count = itertools.count(1)
>>> new_cols = [f"Nice{next(count)}" if col == "Nice" else col for col in df.columns]
>>> df.columns = new_cols
>>> df
   Nice1  Nice2  Hello
0      1      2      3

(f 字符串需要 Python 3.6+)

编辑:或者,根据下面的评论,列表表达式可以替换任何可能包含"Nice"的标签,以防出现意外空格或其他字符:

new_cols = [f"Nice{next(count)}" if "Nice" in col else col for col in df.columns]

推荐阅读