Ответ 1
Самый простой способ, который я вижу, - сделать их в DataFrame, а затем принять минимальный размер строки:
>>> print pandas.concat([s1, s2], axis=1).min(axis=1)
1 1
2 1
3 1
4 1
dtype: float64
У меня возникли проблемы с поиском способа сделать эффективный поэтапный минимум из двух объектов серии в 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
Самый простой способ, который я вижу, - сделать их в DataFrame, а затем принять минимальный размер строки:
>>> print pandas.concat([s1, s2], axis=1).min(axis=1)
1 1
2 1
3 1
4 1
dtype: float64
Другой аналогичный способ:
In [11]: pd.DataFrame([s1, s2]).min()
Out[11]:
1 1
2 1
3 1
4 1
dtype: float64
Я считаю это самым простым:
import numpy as np
smax = np.minimum(s1, s2)
Тот же ответ, что и у Энди Хейдена, но его легче читать:
>>> 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
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