首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用df.add_suffix在Pandas中添加后缀以复制列名?

如何使用df.add_suffix在Pandas中添加后缀以复制列名?
EN

Stack Overflow用户
提问于 2020-12-20 13:57:31
回答 4查看 2.4K关注 0票数 0

我有一个有400列的大数据。200的列名是前200的重复。如何使用df.add_suffix只在重复的列名中添加后缀?

还是有更好的方法自动完成它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-12-20 14:33:54

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

代码语言:javascript
运行
复制
df = pd.DataFrame(data=[[1, 2, 3, 4]], 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

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

票数 0
EN

Stack Overflow用户

发布于 2022-11-02 11:21:01

以下是我的解决方案,首先是:

代码语言:javascript
运行
复制
df=pd.DataFrame(np.arange(4).reshape(1,-1),columns=['a','b','a','b'])

输出

代码语言:javascript
运行
复制
  a b a b
0 1 2 3 4

然后我使用Lambda函数

代码语言:javascript
运行
复制
df.columns += df.columns+np.vectorize(lambda x:'_' if x else '')(df.columns.duplicated())

输出

代码语言:javascript
运行
复制
    a   b   a_  b_
0   0   1   2   3

如果你有一个以上的重复,那么你可以循环,直到没有剩下。这也适用于复制的索引,它也保留索引名。

票数 1
EN

Stack Overflow用户

发布于 2020-12-20 14:09:08

你可以这样做:

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
   a0  a1  a2
0   1   2   3

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

代码语言:javascript
运行
复制
# setup dummy DataFrame with repeated columns
df = pd.DataFrame(data=[[1, 2, 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)

输出(只用于一个副本)

代码语言:javascript
运行
复制
   a0  a1  b0  b1
0   1   2   3   4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65380653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档