我有 pandas 数据框,我正在尝试选择多个列(列范围从
Test to Bio Ref
开始)。选择必须从列名称 Test
start到任何名称以
Bio
开头的列名称。以下是示例数据框。
实际上它可以包含:
Test
列之前的任意数量的列,Bio Ref
之间的任意数量的列,如 2、3、4、5 等。Bio Ref
之后的任意数量的列。Bio Ref
列可以包含后缀,但 Bio Ref
将始终作为列名称的开头。df_chunk = pd.DataFrame({'Waste':[None,None],
'Test':['something', 'something'],
'2':[None,None],
'3':[None,None],
'Bio Ref':['2-50','15-100'],
'None':[None,None]})
df_chunk
Waste Test 2 3 Bio Ref None
0 None something None None 2-50 None
1 None something None None 15-100 None
我已经尝试过以下有效的代码:
df_chunk.columns.str.startswith('Bio')
df_chunk[df_chunk.columns[pd.Series(df_chunk.columns).str.startswith('Bio')==1]]
问题:但是当我尝试使用它们进行多列选择时,它不起作用:
df_chunk.loc[:,'Test':df_chunk.columns.str.startswith('Bio')]
您可以为布尔索引创建掩码:
m1 = np.maximum.accumulate(df_chunk.columns=='Test')
m2 = np.maximum.accumulate(df_chunk.columns.str.startswith('Bio')[::-1])[::-1]
out = df_chunk.loc[:, (m1&m2)]
输出:
Test 2 3 Bio Ref
0 something None None 2-50
1 something None None 15-100