Python 当数据点也有起点/终点时,使用熊猫检索具有给定起点/终点的数据的有效方法是什么?
我目前正在开发一个利用基因组计数数据的应用程序。该数据被加载到数据帧中。此数据的示例如下所示: 色度 铬起动 铬酸盐 高度 chr3 93504854 93504940 0 chr3 93504940 93504977 1. chr3 93504977 93505016 2. chr3 93505016 93505018 1. chr3 93505018 93505053 2. chr3 93505053 93505093 1. chr3 93505093 93505151 0 chr3 93505151 93505227 1. chr3 93505227 93505252 0 chr3 93505252 93505328 1.Python 当数据点也有起点/终点时,使用熊猫检索具有给定起点/终点的数据的有效方法是什么?,python,python-3.x,pandas,data-science,Python,Python 3.x,Pandas,Data Science,我目前正在开发一个利用基因组计数数据的应用程序。该数据被加载到数据帧中。此数据的示例如下所示: 色度 铬起动 铬酸盐 高度 chr3 93504854 93504940 0 chr3 93504940 93504977 1. chr3 93504977 93505016 2. chr3 93505016 93505018 1. chr3 93505018 93505053 2. chr3 93505053 93505093 1. chr3 93505093 93505151 0 chr3 935
下面是使用pandas系列中的函数的解决方案。在排序的序列中,它告诉您应该将传递的值放在何处以保持数据排序 在您的数据上使用您的函数,我得到:
chrom = 'chr3'
start = 93504854
end = 93505053
df = df.sort_values(['chrom','chromStart','chromEnd'])
df.apply(checkInBounds, axis=1, args=(chrom, start, end))
0 True
1 True
2 True
3 True
4 True
5 True
6 False
7 False
8 False
9 False
下面是搜索排序的函数
def checkInBounds_new(df, start, end, chrom):
bound1 = df.chromStart.searchsorted(start)
bound2 = df.chromStart.searchsorted(end)
df = df.loc[bound1:bound2]
return df[df['chrom'] == chrom]
checkInBounds_new(df, start, end, chrom):
这给了你:
chrom chromStart chromEnd height
0 chr3 93504854 93504940 0
1 chr3 93504940 93504977 1
2 chr3 93504977 93505016 2
3 chr3 93505016 93505018 1
4 chr3 93505018 93505053 2
5 chr3 93505053 93505093 1
请注意,这两个函数基本上都返回这些输入的前5行。另外,我没有在这里执行任何检查,比如确保end>start等等。检查df.apply()的更快替代方法