2016-01-27 15 views
12

Pandalarda, diğer iki sütunda bir boole işlemi olan hesaplanmış bir sütun oluşturmak istiyorum.Bir veri çerçevesinin iki sütununda mantıksal işlem

Pandalarda iki sayısal sütunu birlikte eklemek kolaydır. Mantıksal operatör AND ile benzer bir şey yapmak istiyorum.

In [1]: d = pandas.DataFrame([{'foo':True, 'bar':True}, {'foo':True, 'bar':False}, {'foo':False, 'bar':False}]) 

In [2]: d 
Out[2]: 
    bar foo 
0 True True 
1 False True 
2 False False 

In [3]: d.bar and d.foo ## can't 
... 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Yani mantıksal operatörler pandalar sayısal operatörler olarak oldukça aynı şekilde çalışır yok sanırım: İşte benim ilk deneme. Ben hata mesajı da anlaşılacağı yapıyor ve bool() kullanarak çalıştı:

In [258]: d.bar.bool() and d.foo.bool() ## spoiler: this doesn't work either 
... 
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Ben int boole sütunları döküm bunları birbirine ekleyerek bir mantıksal olarak değerlendirerek çalışan bir yolunu buldu.

In [4]: (d.bar.apply(int) + d.foo.apply(int)) > 0 ## Logical OR 
Out[4]: 
0  True 
1  True 
2 False 
dtype: bool 

In [5]: (d.bar.apply(int) + d.foo.apply(int)) > 1 ## Logical AND 
Out[5]: 
0  True 
1 False 
2 False 
dtype: bool 

Bu kıvrımlıdır. Daha iyi bir yolu var mı?

cevap

18

Evet, daha iyi bir yol var! Sadece & elementel mantıksal ve operatörü kullanın:

d.bar & d.foo 

0  True 
1 False 
2 False 
dtype: bool 
+2

Teşekkür ederiz! Bu pandalar dokümanlar herhangi bir yerde belirtilen mi? – dinosaur

+2

@dinosaur Evet, [boole indeksleme bölümünde] & 've' | 'kullanma örnekleri var (http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing) –