pandas按多个值过滤列值

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

我有多个专栏,如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'要求字符串作为左操作数,而不是列表

有没有办法按多个值过滤列?

python pandas filtering
2个回答
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')

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