Подтвердить что ты не робот

Создание минимальной по элементам серии из двух других рядов в Python Pandas

У меня возникли проблемы с поиском способа сделать эффективный поэтапный минимум из двух объектов серии в pandas. Например, я могу добавить две серии достаточно легко:

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).

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
4b9b3361

Ответ 1

Самый простой способ, который я вижу, - сделать их в DataFrame, а затем принять минимальный размер строки:

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

Ответ 2

Другой аналогичный способ:

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

Ответ 4

Тот же ответ, что и у Энди Хейдена, но его легче читать:

>>> import pandas as pd
>>> s1 = pd.Series(data=[1,2,3,4,5], index=[1,2,3,4,5])
>>> s2 = pd.Series(data=[5,1,3,5], index=[1,2,3,4])
>>> pd.DataFrame([s1, s2]).min()
1    1.0
2    1.0
3    3.0
4    4.0
5    5.0
dtype: float64

Ответ 5

pd.Series([1,2,3,4,5]).clip(upper=pd.Series([6,5,4,3,2]))

получит вас:

0    1
1    2
2    3
3    3
4    2
dtype: int64