2013-06-07 8 views
19

Ich habe Probleme einen Weg zu finden, um ein effizientes elementweises Minimum von zwei Serien Objekten in Pandas zu erstellen. Zum Beispiel kann ich zwei Serien leicht genug, um hinzuzufügen:Eine elementweise minimale Serie von zwei anderen Serien in Python Pandas erstellen

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 

Aber ich kann nicht eine effiziente Art und Weise zu tun, um ein elementweise Minimum zwischen zwei Serien (zusammen mit dem Indizes Ausrichtung und Handhabung NaN-Werte) finden.

Vergesst. Es gibt einen Notausstieg mit der Funktion kombinieren, so können Sie jedes Element weise Funktion setzen in:

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

Ich denke, man sollte das Bit nach „macht nichts“ als Antwort, anstatt am Ende der Frage (ich würde upvote) hinzufügen ... Obwohl ich, dass 'min (1 nicht einverstanden ist, NaN) == 0' .... –

Antwort

17

Die einfachste Art, wie ich sehen kann, ist sie in einen Datenrahmen zu machen und dann die reihenweise min :

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

Auf Pandas 0.19.2 ist das schneller als andere Wege um mehr als drei Größenordnungen –

16

Eine andere ähnliche Art und Weise:

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

Das funktioniert nur bei Pandas 0.17 wenn ich 'min (axis = 1)' rufe – ihadanny

Verwandte Themen