Python 从DataFrame中选择列中具有有限值的最新索引的有效方法?
我正在尝试查找最新的索引,其值相对于当前索引而言不是“NaN”。所以,假设我有一个数据帧,其值为“NaN”,如下所示:Python 从DataFrame中选择列中具有有限值的最新索引的有效方法?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我正在尝试查找最新的索引,其值相对于当前索引而言不是“NaN”。所以,假设我有一个数据帧,其值为“NaN”,如下所示: 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.
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
仅作为相对于当前索引的最后一个索引?您可以尝试类似的方法,将索引
转换为与列B
具有相同NaN
值的序列,然后使用ffill()
为所有后续NaN
s向前携带最后一个非缺失索引:
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
一些有用的方法
最后一个有效索引
第一个有效索引
对于索引
4
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
您的预期输出是什么?理想情况下,我希望得到值
4.6
和索引1
。您只想知道索引4
处的最新索引,还是想知道所有索引的最新索引?对于这种情况,只需要查找索引处的索引(在示例中是4)。