如何为lis中数据帧的特定列名附加后缀

2024-09-29 00:13:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据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看起来像

^{pr2}$

我可以用新名称替换这些列名,如下所示

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

但是我正在寻找一个解决方案,我可以在列名后面加上前缀而不是替换它, 例如,我的列名应该是这样的

AE02    AE03    AE04    AE05    DMR_AE06    AE07    DMR_AE08    DMR_AE09    AE10    AE11    DMR_AE12

任何建议和帮助都是值得的


Tags: 名称df1df2dmrae05ae03ae04ae02
2条回答

使用Python中的列表理解:

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

熊猫解决方案:

您可以通过^{}^{}mask一起使用:

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  

相关问题 更多 >