如何在 Pandas Python 中根据部分列名称选择列范围?

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

我有 pandas 数据框,我正在尝试选择多个列列范围

Test to Bio Ref
开始)。选择必须从列名称 Test
start
到任何名称以
Bio
开头的列名称。以下是示例数据框。

实际上它可以包含:

  1. Test
    列之前的任意数量的列,
  2. Test 和
    Bio Ref
    之间的任意数量的列,如 2、3、4、5 等。
  3. Bio Ref
    之后的任意数量的列。
  4. 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')]
python pandas dataframe
1个回答
0
投票

您可以为布尔索引创建掩码:

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
© www.soinside.com 2019 - 2024. All rights reserved.