大熊猫按多个值过滤列值

时间:2018-09-10 15:00:08

标签: python pandas filtering

我有多个列的df,例如MLB,NBA,NHL,NFL,TESTNBA,我想返回一个列表,其中列中包含字符串MLB或NBA。如下所示:

df_check = ['MLB', 'NBA', 'TESTNBA']

value_cols = [col for col in df.columns if df_check in col]

以上操作失败,并出现以下错误:

TypeError:“ in”要求将字符串作为左操作数,而不是列表

是否可以通过多个值过滤列?

2 个答案:

答案 0 :(得分:1)

您可以使用pandas.DataFrame.filter

设置

df = pd.DataFrame(columns=['MLB', 'NBA', 'NHL', 'NFL', 'TESTNBA'])    
df_check = ['MLB', 'NBA']

df.filter(regex='|'.join(df_check)).columns

Index(['MLB', 'NBA', 'TESTNBA'], dtype='object')

答案 1 :(得分:0)

in运算符不能以矢量化方式工作。根据您的逻辑,您需要将any与生成器表达式结合使用:

value_cols = [col for col in df.columns if any(i in col for i in df_check)]

更好的是,您可以将布尔索引用于str.contains。这是一个演示:

df = pd.DataFrame(columns=['MLB1', 'NBA2', 'SOMEOTHERCOL', 'TESTNBA3', 'MLB4'])

df_check = ['MLB', 'NBA', 'TESTNBA']

value_cols = df.columns[df.columns.str.contains('|'.join(df_check))]

Index(['MLB1', 'NBA2', 'TESTNBA3', 'MLB4'], dtype='object')