Python 试图在范围内收集不一致的数据
我正在使用python。我试图将一组数据划分为1000个元素范围,并找到平均值,包括不以0.0表示的站点 下面是数据示例Python 试图在范围内收集不一致的数据,python,data-manipulation,Python,Data Manipulation,我正在使用python。我试图将一组数据划分为1000个元素范围,并找到平均值,包括不以0.0表示的站点 下面是数据示例 X 2699528 0.000786782 X 2699555 0.493415 X 2699559 0.000786782 X 2699625 0.0748873 X 2699645 0.0712507 X 2699664 0.000786782 X 2699676 0.400653 X 2699683 0.0109586 X 2699711 0.000786782 X 2
X 2699528 0.000786782
X 2699555 0.493415
X 2699559 0.000786782
X 2699625 0.0748873
X 2699645 0.0712507
X 2699664 0.000786782
X 2699676 0.400653
X 2699683 0.0109586
X 2699711 0.000786782
X 2699739 0.00157294
X 2699060.0617229
X 2699919 0.000786782
X 2699934 0.000786782
X 2699968 0.498501
X 2700027 0.499971
X 2700040 0.000786782
X 2700089 0.0101799
X 2700147 0.000786782
X 2700157 0.0719793
X 2700185 0.00314341
X 2700189 0.000786782
我希望数据看起来像:
X 2700000 average1
X 2701000 average2
....
问题是在每个范围内没有一个一致的数字。某些范围内可能有零个元素。此外,我不想简单的一个平均值,但一个平均值的网站,不包括太多。基本上,如果我有
X 1 10
X 3 10
X 5 10
X 7 10
X 9 10
我不想返回10作为平均值,而是5(五个0和五个10)
下面是我的代码
import sys
sum = 0.0
startin = 2700000
for i in range(2700, 155000):
m = (i * 1000) + 1000
i = i * 1000
for line in sys.stdin:
data =line.strip().split('\t')
if data[0] == "CHROM":
continue
if int(data[1]) >= i and int(data[1]) <= m:
sum += float(data[2])
print i, (sum/1000)
continue
谢谢您的帮助。您可以使用整数除法在一次迭代中将所有值分配给存储桶,而不是针对每个可能的范围对整个数据集进行迭代
buckets = defaultdict(float)
bucket_size = 1000
for line in lines:
index,value = line.split()
buckets[int(index)/bucket_size] += float(value)
for k,v in sorted(buckets.items()):
print k,v/bucket_size
所以有什么问题吗?这不是快速测试法,但似乎你得到了你想要的。所有的平均值都不同,但它只打印了第一项的平均值。
buckets = defaultdict(float)
bucket_size = 1000
for line in lines:
index,value = line.split()
buckets[int(index)/bucket_size] += float(value)
for k,v in sorted(buckets.items()):
print k,v/bucket_size