我有一个400列的大型数据框架。其中200个列名与前200个列名重复。如何使用df.add_suffix仅为重复的列名添加后缀?有没有更好的方法可以自动完成?
kkih6yb81#
以下是我的解决方案,从以下开始:
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
如果你有一个以上的副本,那么你可以循环,直到没有留下。这也适用于重复的索引,它还保留了索引名称。
vnjpjtjt2#
如果我没理解错的话,每个名字都有两次。如果是这样,可以使用df.columns.duplicated()请求重复的值。然后,您可以创建一个新的列表,只需修改重复的值并添加自定义的后缀。这与其他发布的修改所有条目的解决方案不同。
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 可能会有重复的列名。
pkln4tw63#
您可以执行以下操作:
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
w6lpcovy4#
添加以“_1”开头的编号后缀,该后缀以第一个重复列开头,适用于出现多次的列。例如,列名称列表:[a,B,c,a,b,a]将返回[a,b,c,a_1,b_1,a_2]
from collections import Counter counter = Counter() empty_list= [] for x in range(df.shape[1]): counter.update([df.columns[x]]) if counter[df.columns[x]] == 1: empty_list.append(df.columns[x]) else: tx = counter[df.columns[x]] -1 empty_list.append(df.columns[x] + '_' + str(tx)) df.columns = empty_list df.columns
4条答案
按热度按时间kkih6yb81#
以下是我的解决方案,从以下开始:
输出
然后我使用Lambda函数
输出
如果你有一个以上的副本,那么你可以循环,直到没有留下。这也适用于重复的索引,它还保留了索引名称。
vnjpjtjt2#
如果我没理解错的话,每个名字都有两次。如果是这样,可以使用
df.columns.duplicated()
请求重复的值。然后,您可以创建一个新的列表,只需修改重复的值并添加自定义的后缀。这与其他发布的修改所有条目的解决方案不同。我的答案有一个缺点,如果一个名字被使用了三次或更多次, Dataframe 可能会有重复的列名。
pkln4tw63#
您可以执行以下操作:
输出
如果只有一个重复列,则可以执行以下操作:
输出*(仅限一个副本)*
w6lpcovy4#
添加以“_1”开头的编号后缀,该后缀以第一个重复列开头,适用于出现多次的列。
例如,列名称列表:[a,B,c,a,b,a]将返回[a,b,c,a_1,b_1,a_2]