3

我有一个看起来像这样的数据框:

In [75]:

x.head()
Out[75]:
         start    end   phone
  0      0       1600    /
  1      1600    1660    p
  2      1660    1720    e
  3      1720    1780    n
  4      1780    1850    e

我有起始编号和结束编号,我想选择这些数字之间的所有行。例如,对于 start=0 和 end=1720,我将获得前三行。

我尝试了天真的方式:

x[x.start==0:x.end==1720]

但这当然行不通。繁琐的方法确实奏效了:

s = x[x.start==0].index
e = x[x.end==1720].index
x[s:e]

有没有更优雅的方法来做到这一点?在我看来,pandas 的问题是我猜不出那些优雅的方式。您只需成为专业人士即可完成工作,否则代码必须丑陋。

4

1 回答 1

2

假设

some_start = 0
some_end = 1720

然后

x[(x.start >= some_start) & (x.end <= some_end)]

请注意,您找到start满足值的索引然后找到满足值的索引的end方法有一些缺点。它要求数据按两列并以正确的顺序排序。这也意味着不能有重复,否则为 True.index的位置x.start==0可能不是单个标量值。

于 2013-10-09T15:11:24.120 回答