2013-06-07 12 views
19

Mam problem ze znalezieniem sposobu na wykonanie wydajnych pod względem elementów minimalnych dwóch obiektów serii w pandach. Na przykład można dodać dwie serie łatwo wystarczy:Tworzenie minimalnej liczby elementów Seria z dwóch innych serii w Pandonie Pythona

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 

Ale nie mogę znaleźć skuteczny sposób wykonać minimum element mądry między dwoma szeregami (wraz z dopasowując indeksy i przenoszenia wartości NaN).

Nieważne. Jest właz ewakuacyjny z funkcją łączenia, dzięki czemu można umieścić w dowolny element mądry funkcję:

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

myślę, że należy dodać trochę po „Nevermind” jako odpowiedź, raczej niż na koniec pytanie (ja upvote) ... Chociaż nie zgadzam się, że 'min (1, NaN) == 0'' ... –

Odpowiedz

17

Najprostszym sposobem widzę jest, aby je w DataFrame a następnie podjąć rząd mądry min :

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

Na pandach 0.19.2 jest to szybciej niż inne sposoby o więcej niż trzy rzędy wielkości –

16

Inny podobny sposób:

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

Działa to tylko dla mnie na pandach 0.17 jeśli nazywam 'min (axis = 1)' – ihadanny

Powiązane problemy