Skip to main content
 首页 » 编程设计

python之如何按名称选择不相邻的多个列并结合几种切片方法

2025年05月04日10Leo_wl

有没有办法选择多个不相邻的列并结合几种方法?

测试数据框:

test = pd.DataFrame(np.random.rand(3, 9), 
                    columns=['ID', 'rfm_snittbeløp_gaver', 'rfm_maksbeløp_gaver', 'rfm_antall_kampanjer', 
                             'a','b','c','d','e']) 

假设我想要以下列:ID,所有以 rfm、a:c 和 e 开头的列。按照这个顺序。

我认为按照这些思路可以做到,但我无法让它发挥作用

frames = [test.loc[:, 'ID'], 
          test.loc[:, test.columns.str.startswith('rfm')], 
          test.loc[:, 'a':'c'], 
          test.iloc[:, -1]] 
 
test_sub = pd.concat(frames) 

我读到它会重置索引,而且我将无法控制列的顺序。

最好有类似 np.r_ 的 .loc 来组合在这篇文章中找到的切片

  1. Selecting non-adjacent columns by column number pandas

但我不喜欢在引用列时使用索引位置

非常感谢任何帮助

请您参考如下方法:

这是使用 np.r_ 的方法和 get_loc()和 get_indexer() :

ID= test.columns.get_loc('ID') 
rfm=test.columns.get_indexer(test.columns[test.columns.str.startswith('rfm')]) 
a=test.columns.get_loc('a') 
c=test.columns.get_loc('c') 
e=test.columns.get_loc('e') 

test.iloc[:,np.r_[ID,rfm,a:c+1,e]] 

         ID  rfm_snittbeløp_gaver  rfm_maksbeløp_gaver  rfm_antall_kampanjer  \ 
0  0.822275              0.155649             0.189058              0.050138    
1  0.188038              0.286731             0.509774              0.171374    
2  0.626211              0.477937             0.585987              0.358124    
 
          a         b         c         e   
0  0.652142  0.492184  0.464453  0.361395   
1  0.242480  0.963673  0.898177  0.813195   
2  0.863088  0.781858  0.924203  0.690219