如何使用 df.add_suffix 为 Pandas 中的重复列名添加后缀?

问题描述

我有一个包含 400 列的大型数据框。 200 个列名与前 200 个重复。如何使用 df.add_suffix 仅向重复的列名添加后缀?

或者有更好的方法来自动完成吗?

解决方法

你可以这样做:

import pandas as pd

# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1,2,3]],columns=list('aaa'))

# create unique identifier for each repeated column
identifier = df.columns.to_series().groupby(level=0).transform('cumcount')

# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype('string')

print(df)

输出

   a0  a1  a2
0   1   2   3

如果只有一个重复的列,你可以这样做:

# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1,3,4]],columns=list('aabb'))

# create unique identifier for each repeated column
identifier = df.columns.duplicated().astype(int)

# rename columns with the new identifiers
df.columns = df.columns.astype('string') + identifier.astype(str)

print(df)

输出 (仅复制一份)

   a0  a1  b0  b1
0   1   2   3   4
,

如果我理解你的问题是正确的,你每个名字都有两次。如果是这样,则可以使用 df.columns.duplicated() 请求重复值。然后您可以创建一个新列表,仅修改重复值并添加您自定义的后缀。这与修改所有条目的其他已发布解决方案不同。

df = pd.DataFrame(data=[[1,columns=list('aabb'))
my_suffix = 'T'

df.columns = [name if duplicated == False else name + my_suffix for duplicated,name in zip(df.columns.duplicated(),df.columns)]
df
>>>
   a  aT  b  bT
0  1   2  3   4

我的回答有一个缺点,如果一个名称被使用三次或更多次,数据框可能有重复的列名。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...