我有一个有400列的大数据。200的列名是前200的重复。如何使用df.add_suffix只在重复的列名中添加后缀?
还是有更好的方法自动完成它?
发布于 2020-12-20 14:33:54
如果我明白你的问题正确,你每个名字都有两次。如果是这样的话,可以使用df.columns.duplicated()
请求重复的值。然后,您可以创建一个新的列表,只修改重复的值并添加自定义后缀。这与修改所有条目的其他发布解决方案不同。
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可能有重复的列名。
发布于 2022-11-02 11:21:01
以下是我的解决方案,首先是:
df=pd.DataFrame(np.arange(4).reshape(1,-1),columns=['a','b','a','b'])
输出
a b a b
0 1 2 3 4
然后我使用Lambda函数
df.columns += df.columns+np.vectorize(lambda x:'_' if x else '')(df.columns.duplicated())
输出
a b a_ b_
0 0 1 2 3
如果你有一个以上的重复,那么你可以循环,直到没有剩下。这也适用于复制的索引,它也保留索引名。
发布于 2020-12-20 14:09:08
你可以这样做:
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, 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)
输出(只用于一个副本)
a0 a1 b0 b1
0 1 2 3 4
https://stackoverflow.com/questions/65380653
复制相似问题