Как определить конец не-NaN серии в пандах - PullRequest
4 голосов
/ 24 мая 2019

Для фрейма данных

df = pd.DataFrame([[np.nan, 3.0, 7.0], [0.0, 5.0, 8.0], [0.0, 0.0, 0.0], [1.0, 3.0, np.nan], [1.0, np.nan, np.nan]],
                  columns=[1, 2, 3], index=pd.date_range('20180101', periods=5))

, что

              1    2    3
2018-01-01  NaN  3.0  7.0
2018-01-02  0.0  5.0  8.0
2018-01-03  0.0  0.0  0.0
2018-01-04  1.0  3.0  NaN
2018-01-05  1.0  NaN  NaN

Я хотел бы знать, когда закончится не-NaN серия (столбец). Полученный фрейм данных должен выглядеть

                1      2      3
2018-01-01  False  False  False
2018-01-02  False  False  False
2018-01-03  False  False  False
2018-01-04  False  False   True
2018-01-05  False   True   True

Я пытался работать с

df.apply(lambda x: x.last_valid_index())

, что приводит к

1   2018-01-05
2   2018-01-04
3   2018-01-03

Пока все хорошо. Но как продолжить? Все решения (также не содержащие last_valid_index()) приветствуются!

1 Ответ

3 голосов
/ 24 мая 2019

Использовать повторное заполнение пропущенных значений тестовыми пропущенными значениями:

df1 = df.bfill().isna()
print (df1)
                1      2      3
2018-01-01  False  False  False
2018-01-02  False  False  False
2018-01-03  False  False  False
2018-01-04  False  False   True
2018-01-05  False   True   True

Деталь

print (df.bfill())
              1    2    3
2018-01-01  0.0  3.0  7.0
2018-01-02  0.0  5.0  8.0
2018-01-03  0.0  0.0  0.0
2018-01-04  1.0  3.0  NaN
2018-01-05  1.0  NaN  NaN
...