Python Pandas选择索引值引用列

时间:2017-11-28 20:28:17

标签: python pandas dataframe

我有一个数据框,它是按日期排序的,并且有一个' 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?

1 个答案:

答案 0 :(得分:3)

您可以将ilocloc合并为一个语句:

original_df.iloc[original_df.loc[original_df['newinfo'] == 'x'].index-1]

loc语句采用条件(newinfox)的索引,然后获取该值的索引。 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]