使用多个条件选择dataframe行的子集

使用多个条件选择dataframe行的子集,dataframe,julia,Dataframe,Julia,我想选择在多行上满足多个条件的数据帧的子集。我知道我可以按顺序这样做-首先选择与第一个条件匹配的子集,然后选择与第二个条件匹配的部分,等等,但似乎应该可以在一个步骤中完成。下面的内容似乎应该有效,但没有。显然,它在其他语言的DataFrame实现中确实是这样工作的。有什么想法吗 using DataFrames df = DataFrame() df[:A]=[ 1, 3, 4, 7, 9] df[:B]=[ "a", "c", "c", "D", "c"] df[(df[:A].<5)&

我想选择在多行上满足多个条件的数据帧的子集。我知道我可以按顺序这样做-首先选择与第一个条件匹配的子集,然后选择与第二个条件匹配的部分,等等,但似乎应该可以在一个步骤中完成。下面的内容似乎应该有效,但没有。显然,它在其他语言的DataFrame实现中确实是这样工作的。有什么想法吗

using DataFrames
df = DataFrame()
df[:A]=[ 1, 3, 4, 7, 9]
df[:B]=[ "a", "c", "c", "D", "c"]
df[(df[:A].<5)&&(df[:B].=="c"),:] 

type: non-boolean (DataArray{Bool,1}) used in boolean context
while loading In[18], in expression starting on line 5

这是一个Julia的东西,而不是一个数据帧的东西:你想要&而不是&&。例如:

julia> [true, true] && [false, true]
ERROR: TypeError: non-boolean (Array{Bool,1}) used in boolean context

julia> [true, true] & [false, true]
2-element Array{Bool,1}:
 false
  true

julia> df[(df[:A].<5)&(df[:B].=="c"),:]
2x2 DataFrames.DataFrame
| Row | A | B   |
|-----|---|-----|
| 1   | 3 | "c" |
| 2   | 4 | "c" |
FWIW,这与Python中熊猫的工作方式相同:

>>> df[(df.A < 5) & (df.B == "c")]
   A  B
1  3  c
2  4  c
我现在有相同的版本,从0.5更新到julia 0.6,现在使用dataframes V0.10.1

更新:我对修复进行了以下更改:

r[(r[:l] .== l) & (r[:w] .== w), :] # julia 0.5

r[.&(r[:l] .== l, r[:w] .== w), :] # julia 0.6
但这会变得非常缓慢,因为长链需要\prop到2^个链的时间 因此,也许现在查询是更好的方式:

# r is a dataframe
using Query
q1 = @from i in r begin
    @where i.l == l && i.w == w && i.nl == nl && i.lt == lt && 
    i.vz == vz && i.vw == vw && i.vδ == vδ && 
    i.ζx == ζx && i.ζy == ζy && i.ζδx == ζδx
    @select {absu=i.absu, i.dBU}
    @collect DataFrame
end

比如说。这很快。它在DataFrames文档中。

哎呀,我自己应该知道的-我甚至看了相关的熊猫问题,但太习惯于键入&&&。。。谢谢这种情况改变了吗?尝试类似的方法,我得到了错误警告:a::DataArray{$Expr:在我的案例1.5.3中,需要对建议的解决方案进行一点修改:df[df[:a]。<5。&df[:B]。==c,:]