我有一个数据框,它是按日期排序的,并且有一个' x'当特定日期有新信息时,在一列中的值。
我想获取最近新信息日期之前的日期行的索引值,以便我可以引用该数据以进行进一步的操作
所以我的数据框看起来像这样:
original_df
index date value newinfo
0 '2007-12-01' 75 Nan
1 '2007-12-02' 75 Nan
2 '2007-12-03' 83 x
3 '2007-12-04' 83 Nan
4 '2007-12-05' 83 Nan
5 '2007-12-06' 47 x
6 '2007-12-07' 47 Nan
7 '2007-12-08' 47 Nan
8 '2007-12-09' 47 Nan
因此,我有兴趣引用original_df.index == 4
行进行进一步操作。
我能想到的唯一方法是非常“笨拙”。基本上我通过过滤newinfo == 'x'
行的原始数据来创建另一个数据帧,获取最后一行的索引值,减去1,并使用该值使用{{1}访问原始数据帧的该行中的各个列}。代码如下所示:
iloc
这会返回interim_df = original_df[original_df['newinfo']=='x']
index_ref_value = interim_df.index[-1] - 1
的{{1}}。
然后我可以访问index_ref_value
中的4
,如下所示:
value
换句话说,我在最近original_df
前一天original_df.iloc[index_ref_value,1]
访问了value
。
这可以完成工作,但让我感到复杂和草率。是否有更清晰,更简单,更Pythonic的方法来查找我正在寻找的index_ref_value?
答案 0 :(得分:3)
您可以将iloc
和loc
合并为一个语句:
original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index-1]
loc
语句采用条件(newinfo
为x
)的索引,然后获取该值的索引。 iloc
然后获取那些索引并为您提供您正在寻找的结果
从您的问题判断,您可能需要在未来中列出这些值。试试df1.iloc[df1.loc[df1['newinfo'] == 'x'].index-1].index.tolist()
编辑以获得所需的输出:
original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index[-1]-1]
# added a [0] at the end below to get just the value of `4`
original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index[-1]-1][0]