如何通过名称选择不相邻的多个列并结合几种切片方法?

问题描述 投票:0回答:1

是否有办法选择不相邻的多列并组合几种方法?

测试数据框:

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

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

非常感谢您的帮助

python pandas slice
1个回答
1
投票

这是使用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  

0
投票

您与axis=1距离很近:

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

test_sub = pd.concat(frames, axis=1)
© www.soinside.com 2019 - 2024. All rights reserved.