2013-06-07 6 views
19

パンダで2つのSeriesオブジェクトの効率的な要素を最小限にする方法を見つけるのが難しいです。例えば、私は簡単に十分な2シリーズを追加することができます要素単位の最小値を作成するPython Pandasの他の2つのシリーズからのシリーズ

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 

をしかし、私は(インデックスを合わせ、NaN値を処理するとともに)2シリーズ間の要素ごとの最小を行うための効率的な方法を見つけることができません。

Nevermind。あなたが任意の要素ごとの機能に置くことができるように組み合わせる機能付きのエスケープハッチがあります:

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

私は、あなたが(私はupvoteしたい)のではなく、質問の最後に、答えとして「ネヴァーマインド」の後にビットを追加する必要があります...私は 'その分(1を反対するが、だと思いますNaN)== 0' .... –

答えて

17

私が見ることができる最も簡単な方法は、データフレームにそれらを作り、その後、行単位分を取ることです:

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

パンダで0.19.2これは他の方法よりも3桁以上速いです –

16

別の同様の方法:

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

これは 'min(axis = 1)'を呼び出すとパンダ0.17で私にとってはうまくいきます – ihadanny

関連する問題