Pandas使用boolean选择DataFrame列

时间:2015-03-26 15:01:13

标签: python pandas

以下条件为我提供了布尔真假结果(梳子是一个包含超过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
.....

6 个答案:

答案 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)

我正在使用它,它更干净

comb.values[:,criteria]

信用:https://en.wikipedia.org/wiki/Linear_congruential_generator

答案 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