2016-10-26 2 views
1

Я хотел добавить суффикс или префикс к некоторым именам столбцов df1 на основе имен в df2. мой df1 выглядит так,Как добавить суффикс для конкретных имен столбцов фрейма данных из списка

AE02 AE03 AE04 AE05 AE06 AE07 AE08 AE09 AE10 AE11 AE12 
11.9619362364 18.5701402709 42.2010838789 28.0025053738 19.5589170223 18.1459582989 16.5292369479 32.4885640738 34.0342144643 31.6971000153 44.932255488 
2.9904840591 3.9793157723 0 0 1.7780833657 1.7281865047 13.7743641233 4.3318085432 0 17.067669239 0 
0 0 0 0 2.6671250485 0 4.5914547078 0 0 0 2.1396312137 

и df2 выглядит,

V1 
AE06 
AE08  
AE09 
AE12 

Я мог бы заменить то имя столбца с новым именем следующим образом,

colnames(df1)[which(colnames(df1) %in% df2$V1)] <- "DMR" 

Но я ищу решение, в котором я могу добавить в качестве префикса имя столбца вместо его замены, например, , мне должно понравиться мои имена столбцов,

AE02 AE03 AE04 AE05 DMR_AE06 AE07 DMR_AE08 DMR_AE09 AE10 AE11 DMR_AE12 

Любые предложения и помощь хорошо apreciated

+1

Укажите, какой язык вы предпочитаете использовать и соответствующим образом помечаете свой вопрос. – Roland

+0

Я изначально пробовал в R, но мне комфортно с обоими. Вот почему его два тега и R и python – user1017373

+2

'colnames (df1) [colnames (df1)% in% df2 $ V1] <- paste0 (" DMR_ ", colnames (df1) [colnames (df1)% in% df2 $ V1]) ' – Roland

ответ

2

Панды решение:

Вы можете использовать numpy.where с mask по Index.isin:

print (df.columns.isin(df2.V1)) 
[False False False False True False True True False False True] 

df.columns = np.where(df.columns.isin(df2.V1), 'DMR_' + df.columns, df.columns) 
print (df) 
     AE02  AE03  AE04  AE05 DMR_AE06  AE07 \ 
0 11.961936 18.570140 42.201084 28.002505 19.558917 18.145958 
1 2.990484 3.979316 0.000000 0.000000 1.778083 1.728187 
2 0.000000 0.000000 0.000000 0.000000 2.667125 0.000000 

    DMR_AE08 DMR_AE09  AE10  AE11 DMR_AE12 
0 16.529237 32.488564 34.034214 31.697100 44.932255 
1 13.774364 4.331809 0.000000 17.067669 0.000000 
2 4.591455 0.000000 0.000000 0.000000 2.139631 
1

со списком понимания в Python:

df.columns = ['DMR_{}'.format(x) if x in df2.V1.values else x for x in df.columns] 
Смежные вопросы