【发布时间】:2021-08-08 02:14:57
【问题描述】:
我目前正在开发一个利用基因组计数数据的应用程序。此数据被加载到 pandas 数据框中。此数据的示例如下所示:
| chrom | chromStart | chromEnd | height |
|---|---|---|---|
| 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 |
我目前有一个标题的实现,这占了我相当多的时间。这是实现:
def checkInBounds(row, chrom, chromStart, chromEnd):
try:
if not chrom == row['chrom']:
return False
except KeyError:
print('row count', row.count)
print("CheckInBoundsKeyError\nRow\n", row, '\n chrom', chrom, 'start', chromStart, 'end', chromEnd)
return False
if chromStart <= row['chromStart'] <= chromEnd:
return True
elif chromStart <= row['chromEnd'] <= chromEnd:
return True
else:
return (row['chromStart'] < chromEnd) and (row['chromEnd'] > chromEnd)
这是使用如下所示的 apply 语句运行的:
df.apply(checkInBounds, axis=1, args=(chrom, start, end))
有没有更快的方法来完成同样的任务?
【问题讨论】:
-
检查这个更快的替代 df.apply() stackoverflow.com/a/41588095/7987118
标签: python python-3.x pandas data-science