Хочу отметить сразу, что этот вопрос очень близок к вопросу # 30990147укупорочные значения, основанные на спорадические триггером
Capping values after a trigger level in a different variable _after GroupBy
Разница в том, что в этой ситуации, переменная, которая вызывает укупорки не продолжают действовать, когда мы отодвигаемся дальше от центра данных. В вопросе 30990147 после срабатывания триггера все последующие значения также будут запускать ту же кепку.
Вот ситуация, мне нужно изучить, что триггер попадает в обоих направлениях из min (dist). В приведенном ниже примере я использую триггер первого отрицательного числа, попавшего по обе стороны от min (dist). min (dist) имеет индекс = 7 для первой группы «город/дата».
я вручную добавлен столбец is_capped и new_b, чтобы проиллюстрировать, где уровни триггера имеют место
In [6]:
df
Out[6]:
City date dist a b is_capped new_b
0 Chicago 5/25/2015 6.55 0.10 36 True 37
1 Chicago 5/25/2015 3.93 0.16 21 True 37
2 Chicago 5/25/2015 3.27 0.06 32 True 37
3 Chicago 5/25/2015 2.62 -0.28 35 True 37
4 Chicago 5/25/2015 1.96 0.09 37 False 37
5 Chicago 5/25/2015 1.31 0.04 39 False 39
6 Chicago 5/25/2015 0.65 0.02 34 False 34
7 Chicago 5/25/2015 0.03 0.09 23 False 23
8 Chicago 5/25/2015 0.58 0.03 36 False 36
9 Chicago 5/25/2015 1.16 0.06 35 False 35
10 Chicago 5/25/2015 2.31 0.05 36 False 36
11 Chicago 5/25/2015 2.89 -0.41 20 True 36
12 Chicago 5/25/2015 3.47 -0.38 35 True 36
13 Chicago 6/16/2015 6.55 0.30 36 True 37
14 Chicago 6/16/2015 3.93 0.16 21 True 37
15 Chicago 6/16/2015 3.27 0.06 32 True 37
16 Chicago 6/16/2015 2.62 -0.28 35 True 37
17 Chicago 6/16/2015 1.96 0.09 37 False 37
18 Chicago 6/16/2015 1.31 0.04 39 False 39
19 Chicago 6/16/2015 0.65 0.02 34 False 34
20 Chicago 6/16/2015 0.03 0.09 23 False 23
21 Chicago 6/16/2015 0.58 0.03 36 False 36
22 Chicago 6/16/2015 1.16 0.06 35 False 35
23 Chicago 6/16/2015 2.31 0.05 36 False 36
24 Chicago 6/16/2015 2.89 -0.41 20 True 36
25 Chicago 6/16/2015 3.47 -0.38 35 True 36
26 NYC 2/22/2015 6.55 0.10 36 True 37
27 NYC 2/22/2015 3.93 0.16 21 True 37
28 NYC 2/22/2015 3.27 0.06 32 True 37
29 NYC 2/22/2015 2.62 -0.28 35 True 37
30 NYC 2/22/2015 1.96 0.09 37 False 37
31 NYC 2/22/2015 1.31 0.04 39 False 39
32 NYC 2/22/2015 0.65 0.02 34 False 34
33 NYC 2/22/2015 0.03 0.09 23 False 23
34 NYC 2/22/2015 0.58 0.03 36 False 36
35 NYC 2/22/2015 1.16 0.06 35 False 35
36 NYC 2/22/2015 2.31 0.05 36 False 36
37 NYC 2/22/2015 2.89 -0.41 20 True 36
38 NYC 2/22/2015 3.47 -0.38 35 True 36
39 NYC 5/5/2015 6.55 0.30 36 True 37
40 NYC 5/5/2015 3.93 0.16 21 True 37
41 NYC 5/5/2015 3.27 0.06 32 True 37
42 NYC 5/5/2015 2.62 -0.28 35 True 37
43 NYC 5/5/2015 1.96 0.09 37 False 37
44 NYC 5/5/2015 1.31 0.04 39 False 39
45 NYC 5/5/2015 0.65 0.02 34 False 34
46 NYC 5/5/2015 0.03 0.09 23 False 23
47 NYC 5/5/2015 0.58 0.03 36 False 36
48 NYC 5/5/2015 1.16 0.06 35 False 35
49 NYC 5/5/2015 2.31 0.05 36 False 36
50 NYC 5/5/2015 2.89 -0.41 20 True 36
51 NYC 5/5/2015 3.47 -0.38 35 True 36
I, то группы данных следующим:
gb = df.groupby(['City','date'])
и все кажется отлично:
In [6]:
gb.City.count()
Out[6]:
City date
Chicago 5/25/2015 13
6/16/2015 13
NYC 2/22/2015 13
5/5/2015 13
Name: City, dtype: int64
Мне нужно, чтобы посмотреть на обе стороны от min (dist) для первого появления < 0. В первой группе (Чикаго, 5/25/2015) триггер падения происходит при индексе = 3, и поэтому все значения с большим (abs (dist)) на нижней стороне будут иметь тот же уровень b, что и значение только перед триггером (индекс = 4). То же самое происходит с восходящей стороны, начиная с min (dist) и поднимаясь вверх. Стартовый триггер находится на уровне индекса = 11, а дополнительные значения new_b будут установлены на значение b при индексе = 10
Кроме того, не обязательно, чтобы когда-либо срабатывал какой-либо спусковой крючок.
Спасибо за любую помощь
Джон
Еще раз спасибо Jianxun. Есть ли какой-то прямой способ вернуть эту информацию в исходный формат с включенными новыми столбцами? – John
@John Вы можете просто «reset_index» на последнем шаге. Я изменил код, чтобы он соответствовал вашей цели. –
безупречный !! Еще раз спасибо ** 2 – John