2013-06-07 7 views
19

Pandalarda etkili bir minimum eleman dizisi yapmanın bir yolunu bulmakta zorlanıyorum. Mesela ben kolayca yeterince iki Series ekleyebilirsiniz:Python Panda'larda diğer iki Serilerden eleman temelli bir minimum seri oluşturma

In [1]: 
import pandas as pd 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.add(s2)  
Out[1]: 
1  2 
2  3 
3  3 
4 NaN 
dtype: float64 

Ama (endekslerini hizalayarak ve NaN değerlerini taşıma ile birlikte) iki Serisi arasında öğeye göre minimum yapmak için etkili bir yol bulmak mümkün değil.

Nevermind. birleştirmek fonksiyonu ile bir çözüm yolu yoktur, herhangi bir öğeye göre fonksiyonunu koymak, böylece:

In [2]: 
s1 = pd.Series(data=[1,1,1], index=[1,2,3]) 
s2 = pd.Series(data=[1,2,2,1], index=[1,2,3,4]) 
s1.combine(s2, min, 0) 
Out[2]: 
1 1 
2 1 
3 1 
4 0 
dtype: int64 
+4

ben, siz (Ben upvote ediyorum) ziyade sorunun sonunda, bir yanıt olarak "Nevermind" dan sonra biraz eklemek gerekir ... Ben 'O dakika (1 katılmıyorum rağmen düşünmek NaN) == 0' .... –

cevap

17

görebildiğim en basit yolu DataFrame bunları yapmak ve sonra sıra sıra min almaktır :

>>> print pandas.concat([s1, s2], axis=1).min(axis=1) 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+1

pandalar 0.19.2 üzerinde, bu üç yönden fazla emir ile diğer yollardan daha hızlı –

16

başka benzer bir yol:

In [11]: pd.DataFrame([s1, s2]).min() 
Out[11]: 
1 1 
2 1 
3 1 
4 1 
dtype: float64 
+3

10 Bu sadece benim için çalışırım "min (eksen = 1) 'i çağırırsam pandalar 0.17 – ihadanny