如何根据数据框中的特定模式获取列列表

How to get list of columns based on certain pattern from dataframe

我的数据框中有以下几列,我想获得下面绿色突出显示的两个列列表。

我尝试了以下代码,并且能够获得所需的销售列列表,即 col_sales,其中包括 inv1.1 销售额、inv1.2 销售额、inv1.3 销售额和 inv1.4 销售额

但是,对于 col_num,我得到了一个额外的列,即 inv1_num。排除它的方法是什么?我只需要 inv1_1_num、inv1_2_num、inv1_3_num 和 inv1_4_num.

请注意,在我的真实数据集中,我有 50 多列,它们都遵循相同的模式,并且这些列名称不能更改,因为它们将在下游过程中使用。非常感谢任何建议。

import pandas as pd
df = {'inv1.1 sales':[1],
'inv1.2 sales':[2],
'inv1.3 sales':[3],
'inv1.4 sales':[1],
'inv1 sales':[2],
'inv2 sales':[3],
'inv3 sales':[3],
'inv1_1_num':[4],
'inv1_2_num':[3],
'inv1_3_num':[1],
'inv1_4_num':[3],
'inv1_num':[6],
'inv2_num':[2],
'inv3_num':[3]}

df=pd.DataFrame(df)
col_sales = [x for x in df.columns if ('inv1.' in x) & ('sales' in x)]
col_sales

col_num = [x for x in df.columns if ('inv1_' in x) & ('num' in x)]
col_num

['inv1_1_num', 'inv1_2_num', 'inv1_3_num', 'inv1_4_num', 'inv1_num']

添加count

col_num = [x for x in df.columns if ('inv1_' in x) & ('num' in x) &(x.count('_')==2)]
col_num
Out[298]: ['inv1_1_num', 'inv1_2_num', 'inv1_3_num', 'inv1_4_num']