以下条件为我提供了布尔真假结果(梳子是一个包含超过1,000列的数据框,我选择的列数超过4000个。
criteria=comb.ix[:,'c_0327':].count()>4000
我想用它来选择True列到新的Dataframe 以下仅为我提供了#34; Unalignable boolean Series key"
comb.loc[criteria,]
我也尝试过:
comb.ix[:, comb.ix[:,'c_0327':].count()>4000]
与此问题的答案类似dataframe boolean selection along columns instead of row 但这给了我同样的错误:"提供了不可对齐的布尔系列键"
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
.....
答案 0 :(得分:21)
返回的是一个系列,其中列名作为索引,布尔值作为行值。
我想你真的想要:
现在应该可以了:
comb[criteria.index[criteria]]
基本上,它使用条件中的索引值和布尔值来掩盖它们,这将返回一个列名称数组,我们可以使用它来从orig df中选择感兴趣的列。
答案 1 :(得分:7)
您也可以使用:
# 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]
答案 2 :(得分:1)
答案 3 :(得分:1)
在熊猫0.25中:
comb.loc[:, criteria]
返回具有通过布尔列表或系列选择的列的数据框。
对于尝试使用多个条件的任何人,
comb.loc[:, criteria1 & criteria2]
注意:
在此处使用and
代替&
无效。这是由于and
试图确定整个数组的布尔值,而&
则按元素进行操作。 Logical operators for boolean indexing in Pandas中对此进行了讨论。
答案 4 :(得分:0)
另一种解决方案是转置comb
以使其列充当其索引,然后转置到结果子集上:
comb.T[criteria].T
同样,不是特别优雅,但至少比领先解决方案短/重复少。
答案 5 :(得分:0)
您可以将布尔数组传递给 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