2016-07-03 6 views
1

Есть ли способ вернуть имя/заголовок столбца в строку в кадре данных pandas? Я хочу работать с рядом данных, имеющих тот же префикс. Заголовок dataframe выглядит следующим образом:Python/Pandas dataframe - имя возвращаемого столбца

col_00 | col_01 | ... | col_51 | bc_00 | cd_00 | cd_01 | ... | cd_90 

Я хотел бы применить функцию к каждой строке, но только от col_00 к col_51 и cd_00 в cd_90 отдельно. Чтобы сделать это, я подумал, что собираю имена столбцов в списке, fe. to_work_with будет списком столбцов, начинающихся с префикса 'col', примените функцию к df[to_work_with]. Затем я бы изменил to_work_with, и он будет содержать список столбцов, начинающихся с префикса 'cd' и так далее. Но я не знаю, как перебирать имена столбцов.

Так в основном, вещь я ищу это функция:

to_work_with = column names in the df that start with "thisstring" 

Как я могу это сделать? Спасибо!

+2

Вы хотите '' [седловины окра в ФР. columns.values, если col.startswith ("thisstring")] ''? – mhoff

ответ

2

Вы можете использовать boolean indexing с str.startswith:

cols = df.columns[df.columns.str.startswith('cd')] 
print (cols) 
Index(['cd_00', 'cd_01', 'cd_02', 'cd_90'], dtype='object') 

Пример:

print (df) 
    col_00 col_01 col_02 col_51 bc_00 cd_00 cd_01 cd_02 cd_90 
0  1  2  3  4  5  6  7  8  9 

cols = df.columns[df.columns.str.startswith('cd')] 
print (cols) 
Index(['cd_00', 'cd_01', 'cd_02', 'cd_90'], dtype='object') 

#if want apply some function for filtered columns only 
def f(x): 
    return x + 1 

df[cols] = df[cols].apply(f)  
print (df) 
    col_00 col_01 col_02 col_51 bc_00 cd_00 cd_01 cd_02 cd_90 
0  1  2  3  4  5  7  8  9  10 

Другое решение с list comprehension:

cols = [col for col in df.columns if col.startswith("cd")] 
print (cols) 
['cd_00', 'cd_01', 'cd_02', 'cd_90'] 
+0

Удивительно! Спасибо! :) –

+0

Я приму это через 4 минуты;) –

+0

Рад может вам помочь! Удачи! – jezrael

Смежные вопросы