我有一个看起来像这样的数据框:
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 的问题是我猜不出那些优雅的方式。您只需要成为专业人士才能做事,否则代码必须很丑陋。
最佳答案
假设
some_start = 0
some_end = 1720
然后
x[(x.start >= some_start) & (x.end <= some_end)]
请注意,您找到满足 start
值的索引,然后找到满足 end
值的索引的方法有一些缺点。它要求数据按两列并以正确的顺序排序。这也意味着不能有重复项,否则 x.start==0
为 True 的位置的 .index
可能不是单个标量值(value)。
关于python - 有条件地选择数据框行的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275808/