2015-04-02 12 views
6

Birden çok satırı birden çok satıra karşılayan bir veri kümesinin alt kümesini seçmek istiyorum. Bunu sırayla yapabilirim - önce ilk koşula uyan altkümeyi seçiyorum, sonra ikinciyle eşleşenlerin bir kısmı, vs., ama tek bir adımda yapılması gerektiği gibi görünüyor. Aşağıdaki, işe yarayacak gibi görünüyor, ama değil. Görünüşe göre DataFrame'in diğer dillerdeki uygulamalarında böyle çalışıyor. Düşüncesi olan var mı?Birden çok koşulu kullanarak veri çerçevelerinin satır alt kümesini seçin

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 

cevap

7

Bu Julia şey, çok değil bir DataFrame şeydir: Eğer & yerine && istiyorum. Örneğin:

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, bu Python pandalar aynı şekilde çalışır:

>>> df[(df.A < 5) & (df.B == "c")] 
    A B 
1 3 c 
2 4 c 
+0

Herkese, kendimi yakalamam gerekirdi - Hatta ilgili panda sorularına baktım ama "&&" yazmak için çok kullanmıştım ... Teşekkürler! – ARM

+0

Bu değişti mi? Benzer bir şey denemek 'UYARI: a :: DataArray {$ (Expr (: <:,: Tamsayı))} & b :: DataArray {$ (Expr (: <:,: Tamsayı))} hatasını kabul ediyorum. & amp; kullanın (a, b) yerine. – jwimberley

0

Ben 0,5 ila Julia'ya 0.6 benim güncelleme üzerinde meydana gelen https://stackoverflow.com/users/5526072/jwimberley olarak şimdi aynı olması ve şimdi kullanarak dataframes v 0.10.1.

Güncelleme: Ben düzeltmek için aşağıdaki değişikliği yapan:

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

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

ama bu (\ propto 2^zincirleri geçen süre) uzun zincirler yüzden belki Sorgu şimdi daha iyi yoludur ile çok yavaş olur:

Örneğin,

. Bu hızlı. DataFrames belgelerinde var.