Как мне использовать df.add_suffix для добавления суффиксов к дублирующимся именам столбцов в Pandas?

#pandas #dataframe #suffix

#pandas #dataframe #суффикс

Вопрос:

У меня большой фрейм данных с 400 столбцами. 200 имен столбцов являются дубликатами первых 200. Как я могу использовать df.add_suffix для добавления суффикса только к повторяющимся именам столбцов?

Или есть лучший способ сделать это автоматически?

Ответ №1:

Если я правильно понял ваш вопрос, у вас есть каждое имя дважды. Если это так, можно запросить дублированные значения, используя 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
 

Мой ответ имеет тот недостаток, что фрейм данных может иметь дублированные имена столбцов, если одно имя используется три или более раз.

Ответ №2:

Вы могли бы сделать:

 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
 

Ответ №3:

Добавить нумерационный суффикс, начинающийся с ‘_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