Захватите строку фрейма данных pandas на основе значения в этой строке и нескольких предыдущих строк

1

У меня много кадров данных со следующей структурой.

TRCODEP     10101     10201     20101     20201 20203
43826     4:00:00       NaN       NaN       NaN   NaN
43827         NaN       NaN       NaN       NaN   NaN
43828         NaN  20:00:00       NaN       NaN   NaN
43829         NaN       NaN       NaN  20:35:00   NaN
43830    20:45:00       NaN       NaN       NaN   NaN
43829         NaN       NaN  02:00:00       NaN   NaN

Для каждого кадра данных я хотел бы создать новый фрейм данных, который выбирает строку с записью, отличной от NaN, в столбце 10101 и тремя предыдущими строками. У меня возникают проблемы, потому что у меня может быть несколько записей, отличных от NaN, для 10101, как вы можете видеть выше. И даже если учесть эту проблему, я, похоже, не могу df['10101'].notna().index[0] с помощью df['10101'].notna().index[0] и df['10101'].notna().index[0]-3.

Какие у меня варианты?

Теги:
pandas

1 ответ

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

Это не так сложно. Вы можете сделать это с помощью Series.last_valid_index и некоторых Series.last_valid_index:

# get index of last valid non-null value in 10101
idx = df.index.get_loc(df['10101'].last_valid_index())
# slice rows (with some minor bounds checking)
df.iloc[max(0, idx - 3):idx + 1]

   TRCODEP     10101     10201 20101     20201  20203
1    43827       NaN       NaN   NaN       NaN    NaN
2    43828       NaN  20:00:00   NaN       NaN    NaN
3    43829       NaN       NaN   NaN  20:35:00    NaN
4    43830  20:45:00       NaN   NaN       NaN    NaN

Ещё вопросы

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