Переименование столбца в pandas dataframe, если условие выполнено - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь выяснить, можно ли переименовать заголовок столбца, если выполняется какое-либо условие. У меня есть датафрейм для панд:

import pandas as pd

data = [[1,'Joe', '2018', 5,7,9]]

df = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScore', 'WinterScore', 'SpringScore'])

print(df)
   ID Name  Year  FallScore  WinterScore  SpringScore
0   1  Joe  2018          5            7            9

То, что я пытаюсь сделать, это если столбец содержит «Осень», «Зима» или «Весна» и добавляет строку «NEW» в конец заголовка столбца. Вот как будет выглядеть желаемый результат.

df_desired = pd.DataFrame(data, columns = ['ID', 'Name', 'Year', 'FallScoreNEW', 'WinterScoreNEW', 'SpringScoreNEW'])

print(df_desired)
   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9

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

Здесь я получил массив логических значений:

df.columns.str.contains('Fall')
df.columns.str.contains('Winter')
df.columns.str.contains('Spring')

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 16 апреля 2019

Вы можете использовать rename с лямбда-выражением:

df.rename(lambda x: x + 'NEW' if any(k in x for k in keys) else x, axis=1)

   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9

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

df.columns = [x + 'NEW' if any(k in x for k in keys) else x for x in df]
df

   ID Name  Year  FallScoreNEW  WinterScoreNEW  SpringScoreNEW
0   1  Joe  2018             5               7               9
...