Добавить суффикс к именам столбцов, у которых еще нет суффикса - PullRequest
2 голосов
/ 02 октября 2019

У меня есть фрейм данных с такими столбцами, как

Name  Date  Date_x  Date_y  A  A_x  A_y..

, и мне нужно добавить _z к столбцам (кроме столбца Name), в которых еще нет _x или _y. Итак, я хочу, чтобы вывод был похож на

Name  Date_z  Date_x  Date_y  A_z  A_x  A_y...

Я пробовал

df.iloc[:,~df.columns.str.contains('x|y|Name')]=df.iloc[:,~df.columns.str.contains('x|y|Name')].add_suffix("_z")
# doesn't add suffixes and replaces columns with all nans

df.columns=df.columns.map(lambda x : x+'_z' if "x" not in x or "y" not in x else x) 
#many variations of this but seems to add _z to all of the column names

Ответы [ 4 ]

4 голосов
/ 02 октября 2019

Как насчет:

df.columns = [x if x=='Name' or '_' in x else x+'_z' for x in df.columns]
1 голос
/ 03 октября 2019

Вы также можете попробовать:

df.rename(columns = lambda x: x if x=='Name' or '_' in x else x+'_z')

слегка воровать у Куанг Хоанг;)

0 голосов
/ 02 октября 2019

Я бы использовал index.putmask следующим образом:

m = (df.columns == 'Name') | df.columns.str[-2:].isin(['_x','_y'])
df.columns = df.columns.putmask(~m, df.columns+'_z')

In [739]: df.columns
Out[739]: Index(['Name', 'Date_z', 'Date_x', 'Date_y', 'A_z', 'A_x', 'A_y'], dty
pe='object')
0 голосов
/ 02 октября 2019

Добавьте '_z', где заглушка столбца дублируется и без суффикса.

m = (df.columns.str.split('_').str[0].duplicated(keep=False)
     & ~df.columns.str.contains('_'))

df.columns = df.columns.where(~m, df.columns+'_z')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...