[英]How to Select Specific Columns in Pandas DataFrame Using Multiple Boolean Conditions
[英]Pandas Select DataFrame columns using boolean
我想使用 boolean 到 select 的列,其中包含超过 4000 个条目,来自 dataframe comb
,它有超过 1,000 列。 这个表达式给我一个 Boolean (True/False) 结果:
criteria = comb.ix[:,'c_0327':].count()>4000
我想用它来 select 只有True
列到一个新的 Dataframe。
以下只是给我“提供的不可对齐的 boolean 系列密钥”:
comb.loc[criteria,]
我也试过:
comb.ix[:, comb.ix[:,'c_0327':].count()>4000]
类似于这个问题答案dataframe boolean selection along columns instead of row但这给了我同样的错误:“Unalignable boolean Series key provided”
comb.ix[:,'c_0327':].count()>4000
产量:
c_0327 False
c_0328 False
c_0329 False
c_0330 False
c_0331 False
c_0332 False
c_0333 False
c_0334 False
c_0335 False
c_0336 False
c_0337 True
c_0338 False
.....
返回的是一个以列名作为索引和布尔值作为行值的系列。
我认为实际上你想要:
这现在应该工作:
comb[criteria.index[criteria]]
基本上这使用来自标准的索引值和布尔值来屏蔽它们,这将返回一个列名数组,我们可以使用它从原始 df 中选择感兴趣的列。
在熊猫 0.25 中:
comb.loc[:, criteria]
返回一个 DataFrame,其中的列由布尔列表或系列选择。
对于多个条件:
comb.loc[:, criteria1 & criteria2]
并选择具有索引条件的行:
comb[criteria]
注意:按位运算符&
是必需的(不是and
)。 请参阅Pandas 中布尔索引的逻辑运算符。
其他注意:如果条件是一个表达式(例如, comb.columnX > 3
),并且使用了多个条件,请记住将每个表达式括在括号中! 这是因为&, |
具有比>, ==, ect.
等更高的优先级>, ==, ect.
(而and, or
较低的优先级)。
您还可以使用:
# To filter columns (assuming criteria length is equal to the number of columns of comb)comb.ix[:, criteria]comb.iloc[:, criteria.values] # To filter rows (assuming criteria length is equal to the number of rows of comb) comb[criteria]
另一种解决方案是转置comb
以使其列充当其索引,然后对结果子集进行转置:
comb.T[criteria].T
同样,不是特别优雅,但至少比领先的解决方案更短/更少重复。
您可以将布尔数组传递给loc
以指示应保留哪些列,哪些不保留。
例如,
>>> df
A B C D E
0 73 15 55 33 foo
1 63 64 11 11 bar
2 56 72 57 55 foo
>>> df.loc[:, [True, True, False, False, True]]
A B E
0 73 15 foo
1 63 64 bar
2 56 72 foo
另一种方法是使用 Python 的内置filter
function:
def satisfies_criteria(column):
return comb[column].count() > 4000
cols = filter(satisfies_criteria, df.columns)
df[cols]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.