Python 如何根据列值对数据帧进行切片?

Python 如何根据列值对数据帧进行切片?,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个熊猫数据框,格式如下: year col1 y1 val_1 y1 val_2 y1 val_3 y2 val_4 y2 val_5 y2 val_6 y3 val_7 y3 val_8 y3 val_9 如何仅选择第2年之前的值而忽略第3年 我需要一个新的_数据框,如下所示: year col1 y1 val_1 y1 val_2

我有一个熊猫数据框,格式如下:

year    col1 
y1      val_1 
y1      val_2
y1      val_3
y2      val_4
y2      val_5
y2      val_6
y3      val_7
y3      val_8
y3      val_9
如何仅选择第2年之前的值而忽略第3年

我需要一个新的_数据框,如下所示:

   year      col1 
    y1      val_1 
    y1      val_2
    y1      val_3
    y2      val_4
    y2      val_5
    y2      val_6

y1、y2、y3
表示样本数据集上的年份值

,以下工作:

In [35]:

df.iloc[0:df[df.year == 'y3'].index[0]]
Out[35]:
  year   col1
0   y1  val_1
1   y1  val_2
2   y1  val_3
3   y2  val_4
4   y2  val_5
5   y2  val_6
因此,将其分解,我们执行布尔索引以查找与年份值相等的行:

In [36]:

df[df.year == 'y3']
Out[36]:
  year   col1
6   y3  val_7
7   y3  val_8
8   y3  val_9
但我们对索引感兴趣,因此我们可以使用它进行切片:

In [37]:

df[df.year == 'y3'].index
Out[37]:
Int64Index([6, 7, 8], dtype='int64')
但是我们只需要切片的第一个值,因此调用
索引[0]
,但是如果您的df已经按年份值排序,那么只执行
df[df.year
将更简单、更有效