Я хочу перенаправить нулевые значения на основе 2 условий в приведенном ниже «тесте» фрейма данных.
Name Date A B C D Status Gap
abv 7/7/2018 61 1.83 87 33 Y 0
abv 7/8/2018 NULL NULL NULL NULL NULL 1
abv 7/9/2018 NULL NULL NULL NULL NULL 1
abv 7/10/2018 NULL NULL NULL NULL NULL 1
abv 7/11/2018 NULL 4.19 NULL NULL NULL 0
dfg 8/12/2018 42 4.16 151 82 Y 0
dfg 8/13/2018 56 NULL NULL 45 NULL 0
dfg 8/14/2018 NULL NULL NULL NULL NULL 1
dfg 8/15/2018 NULL NULL NULL NULL NULL 1
dfg 8/16/2018 NULL NULL NULL NULL NULL 1
dfg 8/17/2018 NULL NULL NULL NULL NULL 1
dfg 8/18/2018 NULL NULL NULL NULL NULL 1
dfg 8/19/2018 38 2.98 15 85 Y 0
dfg 8/20/2018 NULL NULL NULL NULL NULL 1
dfg 8/21/2018 NULL NULL NULL NULL NULL 1
kjl 10/23/2018 NULL 0 72 NULL N 0
kjl 10/24/2018 NULL NULL NULL NULL NULL 1
kjl 10/28/2018 NULL NULL NULL NULL NULL 1
kjl 10/29/2018 54 4.74 212 75 N 0
Дело 1
для прямого заполнения
для всех записей одного и того же столбца «Имя» следует применять прямое заполнение с ограничением в 2 записи. если зазор = 0 и статус = y для текущей записи и зазор = 1 для последующих записей.
Случай 2: case gap =0 и status = y для текущей записи и gap = 0 для последующих записей, опережающее заполнение не должно применяться для нулевых значений.
Ниже приведена логика моего кода.
if [(test['Status'] == 'Y') & (test['Gap'] == 0) & (test['Gap'].shift(1) == 1)]:
test1 = test.fillna(method = 'ffill', limit =2)
Здесь мой код не проверяет третье условие (где следующая запись имеет пробел = 0) и продолжает заполнение вперед, тем самым нарушая условие case2.
Вот ожидаемый результат:
Name Date A B C D Status Gap
abv 7/7/2018 61 1.83 87 33 Y 0
abv 7/8/2018 61 1.83 87 33 Y 1
abv 7/9/2018 61 1.83 87 33 Y 1
abv 7/10/2018 NULL NULL NULL NULL NULL 1
abv 7/11/2018 NULL 4.19 NULL NULL NULL 0
dfg 8/12/2018 42 4.16 151 82 Y 0
dfg 8/13/2018 56 NULL NULL 45 NULL 0
dfg 8/14/2018 NULL NULL NULL NULL NULL 1
dfg 8/15/2018 NULL NULL NULL NULL NULL 1
dfg 8/16/2018 NULL NULL NULL NULL NULL 1
dfg 8/17/2018 NULL NULL NULL NULL NULL 1
dfg 8/18/2018 NULL NULL NULL NULL NULL 1
dfg 8/19/2018 38 2.98 15 85 Y 0
dfg 8/20/2018 38 2.98 15 85 Y 1
dfg 8/21/2018 38 2.98 15 85 Y 1
kjl 10/23/2018 NULL 0 72 NULL N 0
kjl 10/24/2018 NULL NULL NULL NULL NULL 1
kjl 10/25/2018 NULL NULL NULL NULL NULL 1
kjl 10/26/2018 NULL NULL NULL NULL NULL 1
kjl 10/27/2018 NULL NULL NULL NULL NULL 1
kjl 10/28/2018 NULL NULL NULL NULL NULL 1
kjl 10/29/2018 54 4.74 212 75 N 0
какие-нибудь выводы по этому вопросу?
Вы сделали правильный шаг, исключив тег SQL-Server, что может помочь.






как это связано с SQL-сервером? Кстати, код работает, вы просто ожидаете разных результатов.