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

2024-06-09 05:53:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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
    y1      val_3
    y2      val_4
    y2      val_5
    y2      val_6

y1, y2, y3表示年份值


Tags: 数据pandas格式valyearcol1年份y1
1条回答
网友
1楼 · 发布于 2024-06-09 05:53:49

在您的示例数据集中,以下操作有效:

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

因此,将其分解,我们执行一个布尔索引来查找与year值相等的行:

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')

但是我们只需要第一个值来进行切片,因此调用index[0],但是如果df已经按年份值排序,那么只执行df[df.year < y3]将更简单,也更有效。

相关问题 更多 >