我有一个具有以下格式的 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年的值?

我需要一个new_data框架,如下所示:
   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

因此,请分解为一个 bool 索引来查找等于年份值的行:
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]就会更加简单且有效。

关于python - 如何根据列值切片 Pandas 数据帧?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28964495/

10-12 20:59