Не сказать, что это красиво, но помогает, если есть небольшие данные (что, кажется, имеет место)
def lookup(x):
is_ = s.loc[(s.d >= x.entrydate) & (s.d <= x.exitdate), ['i', 'd']]
return is_.loc[is_.i == x.ddmax, 'd'].iloc[0]
df['location'] = df.apply(lookup, 1)
Выходы
entrydate exitdate ddmax location
1 2012-02-15 2012-02-17 -1 2012-02-16
2 2012-02-18 2012-02-19 -2 2012-02-18
3 2012-02-20 2012-02-21 -3 2012-02-21
4 2012-02-22 2012-02-22 -2 2012-02-22
5 2012-02-24 2012-02-24 -6 2012-02-24
Код выше предполагает, что вашs
- это фрейм данных, например
d i
0 2012-02-15 -3
1 2012-02-16 -1
2 2012-02-17 -2
3 2012-02-18 -2
4 2012-02-19 -1
5 2012-02-20 -1
6 2012-02-21 -3
7 2012-02-22 -2
8 2012-02-23 -3
9 2012-02-24 -6
10 2012-02-25 -9
Если у вас есть pd.Series
, например
d
2012-02-15 -3
2012-02-16 -1
2012-02-17 -2
2012-02-18 -2
2012-02-19 -1
2012-02-20 -1
2012-02-21 -3
2012-02-22 -2
2012-02-23 -3
2012-02-24 -6
2012-02-25 -9
Name: i, dtype: int64
Функция lookup
немного меняется на
def lookup(x):
is_ = s.loc[(s.index >= x.entrydate) & (s.index <= x.exitdate)]
return is_.loc[is_ == x.ddmax].iloc[0]