繁体   English   中英

Pandas Select DataFrame 列使用 boolean

[英]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.values[:,criteria]

信用: https : //stackoverflow.com/a/43291257/815677

另一种解决方案是转置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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM