2016-10-26 35 views
1

我想根據df2中的名稱爲df1的某些列名添加後綴或前綴。 我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

熊貓解決方案:在Python

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

與列表理解:

您可以通過Index.isin使用numpy.wheremask

df.columns = ['DMR_{}'.format(x) if x in df2.V1.values else x for x in df.columns] 
相關問題