У меня есть фрейм данных с именами столбцов, такими как «AH_AP» и «AH_AS». По сути, все, что я хочу сделать, это поменять местами часть перед подчеркиванием и часть после подчеркивания, чтобы заголовки столбцов были '...

0
GlassShark1 8 Июл 2021 в 16:54

4 ответа

Лучший ответ

Сделать это можно так:

Вход:

df = pd.DataFrame(data=[['1','2'], ['3','4']], columns=['AH_PH', 'AH_AS'])
print(df)  

  AH_PH AH_AS
0     1     2
1     3     4

Выход:

df.columns = df.columns.str.split('_').str[::-1].str.join('_')
print(df)

  PH_AH AS_AH
0     1     2
1     3     4

Разъяснил:

  • Используйте метод доступа к строке и метод разделения на '_'

  • Затем, используя метод доступа str с реверсированием нарезки индекса, [:: - 1], вы может изменить порядок списка

  • Наконец, используя метод доступа к строке и соединение, мы можем объединить список снова вместе.

3
Henry Ecker 8 Июл 2021 в 14:19

str.replace также можно использовать с помощью смены групп захвата:

Пример ввода заимствован из ScottBoston

df = pd.DataFrame(data=[['1', '2'], ['3', '4']], columns=['AH_PH', 'AH_AS'])

Затем Захватите все до и после '_' и поменяйте местами группы захвата 1 и 2.

df.columns = df.columns.str.replace(r'^(.*)_(.*)$', r'\2_\1', regex=True)
  PH_AH AS_AH
0     1     2
1     3     4
1
Henry Ecker 8 Июл 2021 в 14:23

Вы были почти у цели: вы можете сделать

df.columns = df.columns.map(rejig_col_names)

За исключением того, что функция вызывается с именем столбца в качестве аргумента, поэтому измените его следующим образом:

def rejig_col_names(col_name):
        elements_of_header = col_name.split('_')
        new_title = elements_of_header[-1] + "_" + elements_of_header[0]
        return new_title
1
joao 8 Июл 2021 в 14:13