如何根据条件选择列?

时间:2019-09-13 06:26:54

标签: python pandas

我有pandas DataFrame,我想知道如何从给定列表targets中选择包含任何子字符串的列:

targets = ["c1", "c2"]

df = 
c1_targ   c2xxx  c3abc
...       ...    ...

预期结果:

df = 
    c1_targ   c2xxx
    ...       ...

这是我尝试过的:

cols = [[True if col in df.columns else False] for col in targets]

2 个答案:

答案 0 :(得分:2)

您可以使用|连接正则表达式OR的字符串的每个值-'c1|c2'c1c2,然后按DataFrame.filter进行过滤:

targets = ["c1", "c2"]

df1 = df.filter(regex='|'.join(targets))

或者通过str.contains创建掩码,并使用:通过DataFrame.loc过滤,以按掩码获取所有行和列:

df1 = df.loc[:, df.columns.str.contains('|'.join(targets))]

print (df1)
  c1_targ c2xxx
0     ...   ...

答案 1 :(得分:1)

您可以使用此:

new_col = [x for x in df.columns if any(y in x for y in targets)]
df = df[df.columns.intersection(new_col)]