Я хотел бы заполнить значения N/A в DataFrame выборочно. В частности, если в столбце есть последовательность последовательных nans, я хочу, чтобы они были заполнены предыдущим значением non-nan, но только если длина наной последовательности ниже заданного порога. Например, если пороговое значение равно 3, то последовательность внутри столбца 3 или менее будет заполнена предшествующим значением non-nan, тогда как последовательность из 4 или более nans будет оставлена как есть.Использование fillna() выборочно в pandas
То есть, если входной DataFrame является
2 5 4
nan nan nan
nan nan nan
5 nan nan
9 3 nan
7 9 1
Я хочу выход быть:
2 5 4
2 5 nan
2 5 nan
5 5 nan
9 3 nan
7 9 1
fillna
функция, когда применяется к DataFrame, имеет метод и предельные параметры. Но этого, к сожалению, недостаточно, чтобы выполнить задачу. Я попытался указать method='ffill'
и limit=3
, но это заполняет первые 3 последовательности любой последовательности, не выборочно, как описано выше.
Я предполагаю, что это может быть закодировано путем перехода столбца за столбцом с некоторыми условными операторами, но я подозреваю, что должно быть что-то большее, чем Pythonic. Любые рекомендации на эффективном пути для этого?
Спасибо @DSM. Это очень приятное решение, которое действительно дает нам то, что мы ищем. Всего один комментарий: он довольно медленный. Я использовал его с пределом 3 для DataFrame размером 530x11500, и это заняло около 32 секунд. Таким образом, хотя это решение велико, альтернативное решение, которое снижает задействованное время работы, будет высоко оценено – splinter
Очень быстро! Время стены: 9,01 с – splinter