Панды: Найти последнее ненулевое значение для каждого отдельного значения переменной

1

У меня есть dataframe, как этот:

    a1  l1
0   a   NaN
1   a   kl
2   a   NaN
3   a   NaN
4   a   er
5   b   ye
6   b   NaN
7   b   fk
8   b   NaN

Я хочу, это последнее предыдущее ненулевое значение l1 для каждой группы значений a1. Таким образом, ожидаемый результат:

    a1  l1  ex
0   a   NaN NaN
1   a   kl  NaN
2   a   NaN kl
3   a   NaN kl
4   a   er  kl
5   b   ye  NaN
6   b   NaN ye
7   b   fk  ye
8   b   NaN fk

Я попытался использовать сдвиг, но я не знаю, как пропустить отсутствующие значения.

Теги:
pandas

1 ответ

2
Лучший ответ

Вам понадобится groupby и apply здесь:

df['ex'] = df.groupby('a1').l1.apply(lambda x: x.ffill().shift())
df

  a1   l1   ex
0  a  NaN  NaN
1  a   kl  NaN
2  a  NaN   kl
3  a  NaN   kl
4  a   er   kl
5  b   ye  NaN
6  b  NaN   ye
7  b   fk   ye
8  b  NaN   fk

Альтернативно, цепочка двух groupby вызовов подряд:

df['ex'] = df.groupby('a1').ffill().groupby('a1').shift()
df

  a1   l1   ex
0  a  NaN  NaN
1  a   kl  NaN
2  a  NaN   kl
3  a  NaN   kl
4  a   er   kl
5  b   ye  NaN
6  b  NaN   ye
7  b   fk   ye
8  b  NaN   fk

Ещё вопросы

Сообщество Overcoder
Наверх
Меню