Ответ 1
Решение@behzad.nouri отлично работало, чтобы вернуть первый и последний не NaN values
с помощью Series.first_valid_index и Series.last_valid_index соответственно.
У меня есть индекс Pandas DataFrame
, индексированный по дате. Существует несколько столбцов, но многие столбцы заполняются только частью временного ряда. Я хотел бы найти, где расположены первые и последние значения не NaN
, чтобы я мог извлечь даты и посмотреть, как долго временные ряды предназначены для определенного столбца.
Может ли кто-нибудь указать мне в правильном направлении, как я мог бы делать что-то подобное? Спасибо заранее.
@behzad.nouri отлично работало, чтобы вернуть первый и последний не NaN values
с помощью Series.first_valid_index и Series.last_valid_index соответственно.
Вот несколько полезных примеров.
s = pd.Series([np.NaN, 1, np.NaN, 3, np.NaN], index=list('abcde'))
s
a NaN
b 1.0
c NaN
d 3.0
e NaN
dtype: float64
# first valid index
s.first_valid_index()
# 'b'
# first valid position
s.index.get_loc(s.first_valid_index())
# 1
# last valid index
s.last_valid_index()
# 'd'
# last valid position
s.index.get_loc(s.last_valid_index())
# 3
(first|last)_valid_index
не определен в DataFrames, но вы можете применить их к каждому столбцу, используя команду apply
.
df = pd.DataFrame({
'A': [np.NaN, 1, np.NaN, 3, np.NaN],
'B': [1, np.NaN, np.NaN, np.NaN, np.NaN]
})
df
A B
0 NaN 1.0
1 1.0 NaN
2 NaN NaN
3 3.0 NaN
4 NaN NaN
df.apply(pd.Series.first_valid_index)
A 1
B 0
dtype: int64
df.apply(pd.Series.last_valid_index)
A 3
B 0
dtype: int64
Вы также можете использовать notna
и idxmax
:
# fast valid index
df.notna().idxmax()
A 1
B 0
dtype: int64
# last valid index
df.notna()[::-1].idxmax()
A 3
B 0
dtype: int64