簡體   English   中英

從Pandas DataFrame中選擇有限值的最新索引的有效方法?

[英]Efficient way to select most recent index with finite value in column from Pandas DataFrame?

我正在嘗試找到最近的索引,其值不是相對於當前索引的“NaN”。 所以,假設我有一個帶有'NaN'值的DataFrame,如下所示:

       A       B       C
0    2.1     5.3     4.7
1    5.1     4.6     NaN
2    5.0     NaN     NaN
3    7.4     NaN     NaN
4    3.5     NaN     NaN
5    5.2     1.0     NaN
6    5.0     6.9     5.4
7    7.4     NaN     NaN
8    3.5     NaN     5.8

如果我目前在索引4,我有值:

       A       B       C
4    3.5     NaN     NaN

我想知道'B'相對於索引4的最后已知值,它在索引1

       A       B       C
1    5.1   -> 4.6    NaN

我知道我可以使用以下內容獲取所有具有NaN值的索引的列表:

indexes = df.index[df['B'].apply(np.isnan)]

但是在大型數據庫中這似乎效率低下。 有沒有辦法只相對於當前指數tail最后一個?

您可以嘗試這樣的方法,將index轉換為與列B具有相同NaN值的系列,然后使用ffill() ,其中包含所有后續NaN的最后一個非缺失索引:

import pandas as pd
import numpy as np
df['Last_index_notnull'] = df.index.to_series().where(df.B.notnull(), np.nan).ffill()
df['Last_value_notnull'] = df.B.ffill()
df

在此輸入圖像描述

現在在索引4 ,您知道最后一個非缺失值是4.6 ,索引是1

一些有用的方法來了解

last_valid_index
first_valid_index
對於索引4B

df.B.ix[:4].last_valid_index()

1

您可以通過這種方式將其用於所有列

pd.concat([df.ix[:i].apply(pd.Series.last_valid_index) for i in df.index],
          axis=1).T

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM