只需执行列表推导即可创建您的列:
In [28]:filter_col = [col for col in df if col.startswith('foo')]filter_colOut[28]:['foo.aa', 'foo.bars', 'foo.fighters', 'foo.fox', 'foo.manchu']In [29]:df[filter_col]Out[29]: foo.aa foo.bars foo.fighters foo.fox foo.manchu0 1.0 0 0 2 NA1 2.1 0 1 4 02 NaN 0NaN 1 03 4.7 0 0 0 04 5.6 0 0 0 05 6.8 1 0 5 0另一种方法是从列创建序列,并使用向量化str方法
startswith:
In [33]:df[df.columns[pd.Series(df.columns).str.startswith('foo')]]Out[33]: foo.aa foo.bars foo.fighters foo.fox foo.manchu0 1.0 0 0 2 NA1 2.1 0 1 4 02 NaN 0NaN 1 03 4.7 0 0 0 04 5.6 0 0 0 05 6.8 1 0 5 0为了实现您想要的目标,您需要添加以下内容以过滤不符合您的
==1条件的值:
In [36]:df[df[df.columns[pd.Series(df.columns).str.startswith('foo')]]==1]Out[36]: bar.baz foo.aa foo.bars foo.fighters foo.fox foo.manchu nas.foo0 NaN 1 NaNNaN NaN NaN NaN1 NaN NaN NaN 1 NaN NaN NaN2 NaN NaN NaNNaN 1 NaN NaN3 NaN NaN NaNNaN NaN NaN NaN4 NaN NaN NaNNaN NaN NaN NaN5 NaN NaN 1NaN NaN NaN NaN编辑
看到您想要复杂的答案后,确定为:
In [72]:df.loc[df[df[df.columns[pd.Series(df.columns).str.startswith('foo')]] == 1].dropna(how='all', axis=0).index]Out[72]: bar.baz foo.aa foo.bars foo.fighters foo.fox foo.manchu nas.foo0 5.0 1.0 0 0 2 NA NA1 5.0 2.1 0 1 4 0 02 6.0 NaN 0NaN 1 0 15 6.8 6.8 1 0 5 0 0


