【问题标题】:Trying to concatanate non-consistant data within range尝试连接范围内的非常量数据
【发布时间】:2015-07-11 23:32:02
【问题描述】:

我正在使用 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 2699739 0.00157294 X 2699906 0.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

返回

2700000 0.002568799204
2701000 0.002568799204
2702000 0.002568799204
2703000 0.002568799204
2704000 0.002568799204
2705000 0.002568799204
2706000 0.002568799204
2707000 0.002568799204
2708000 0.002568799204
2709000 0.002568799204
2710000 0.002568799204
2711000 0.002568799204
2712000 0.002568799204
2713000 0.002568799204
2714000 0.002568799204
2715000 0.002568799204
2716000 0.002568799204
2717000 0.002568799204
2718000 0.002568799204
2719000 0.002568799204
2720000 0.002568799204
2721000 0.002568799204
2722000 0.002568799204

感谢您的帮助。

【问题讨论】:

  • 所以...有什么问题?它不是快速方法,但似乎你得到了你想要的
  • 所有的平均值都不同,但它只打印了第一项的平均值。

标签: python data-manipulation


【解决方案1】:

您可以使用整数除法在一次迭代中将所有值分配给存储桶,而不是为每个可能的范围迭代整个数据集。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多