是否有办法选择不相邻的多列并组合几种方法?
测试数据框:
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
来组合本文中发现的切片
但是我不喜欢在引用列时使用索引位置
非常感谢您的帮助
这是使用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
您与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)