61

パンダで効率的な要素単位の最小 2 つの Series オブジェクトを実行する方法を見つけるのに苦労しています。たとえば、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

しかし、2 つのシリーズ間で要素ごとの最小値を計算する効率的な方法を見つけることができません (インデックスの位置合わせと NaN 値の処理に加えて)。

どうでも。要素ごとの関数を配置できるように、結合関数を使用したエスケープ ハッチがあります。

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

8 に答える 8

46

私が見ることができる最も簡単な方法は、それらを DataFrame にしてから、行単位の分を取ることです。

>>> print pandas.concat([s1, s2], axis=1).min(axis=1)
1    1
2    1
3    1
4    1
dtype: float64
于 2013-06-07T17:52:17.407 に答える
3

このメソッドは仕事をします:

import pandas as pd


def elementwise_min(x, y):
    x[x > y] = y
    return x


a = pd.Series([1, 2, 3])
b = pd.Series([0, 2, 4])
elementwise_min(a, b)
于 2020-04-28T15:04:08.793 に答える