#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