Повторяйте расстояние, затем среднее - PullRequest
0 голосов
/ 21 октября 2019

У меня есть CSV (10 тыс. Записей), и мне нужно выполнить итерацию по длине, а затем усреднить оценки, относящиеся к каждой длине. Таким образом, групповые расстояния между 0 футов и 0,009 футов, а затем найти средний балл для этой длины. Сгруппируйте от 0,01 до 0,019 фута, затем найдите средний балл. Найти среднюю оценку на каждом расстоянии с шагом 0,01 фута:

  feet, score
    0, 5
    0.001, 10
    0.002, 15
    0.003, 20
    0.004, 5
    0.006, 10
    0.008, 20
    0.009, 20
    0.01, 5
    0.011, 10
    0.012, 10
    0.013, 20
    0.013, 15
    0.014, 20
    0.016, 45
    0.017, 5
    0.018, 20
    0.019, 10
    0.02, 20

Затем записать в среднее значение для другого CSV:

  feet, score
    0, 13.125
    0.01, 16

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я только что написал быстрое решение вашей проблемы (за исключением части .csv), которое может вам помочь. Я уверен, что есть хорошее понимание списка, а также.

data = [[0, 5], [1.2, 10], [0.01, 10]]
bounds = [0.1, 1, 2] # Just fill in your (upper) bounds here
grouped = []

# Create a new list with the first values "grouped"
for row in data:    # go through .csv file
    for i, upper_bound in enumerate(bounds):
        if row[0] <= upper_bound:
            grouped.append([bounds[i], row[1]])
            break

# Calculate the average for every group
for i, upper_bound in enumerate(bounds):
    amount = 0
    sum = 0
    for row in grouped:
        if row[0] == upper_bound:
            sum += row[1]
            amount += 1
    try:
        avg = (sum / amount)
        print(str(upper_bound) + ' --> ' + str(sum / amount))
    except: # divided by zero
        print(str(upper_bound) + ' --> 0')
0 голосов
/ 21 октября 2019

как-то так (где a.csv - это ваши 500 строк в формате csv):

from collections import defaultdict
import csv

STEP = 0.01

data = defaultdict(list)

with open('a.csv') as f:
    reader = csv.reader(f,delimiter='\t')
    entries = sorted([entry for entry in reader][1:], key=lambda x: float(x[0]))
    for idx, entry in enumerate(entries):
        entry = [x for x in entry if x]
        feet = float(entry[0])
        score = float(entry[1].strip())
        if idx == 0 or feet - key >= STEP:
            key = feet
        data[key].append(score)
for k, v in data.items():
    print('{} -> {}'.format(k, sum(v) / len(v)))

output

0.0 -> 0.6259896916000001
0.01 -> 0.7254650324999999
0.02 -> 0.7559232991818182
0.031 -> 0.7564042394999999
0.041 -> 0.7016050595454545
0.052 -> 0.5817978843000001
0.062 -> 0.7553227885454544
0.073 -> 0.7331994431
0.083 -> 0.8406338765454549
0.094 -> 0.9791227943636365
0.105 -> 1.828199575
0.115 -> 1.6872732038181821
0.126 -> 1.6354184960000002
0.136 -> 1.6679616310909091
0.147 -> 1.8575009561000002
0.157 -> 1.8417512092000003
0.167 -> 1.8340773533636365
0.178 -> 1.8425028184000003
0.188 -> 2.1295739866
0.198 -> 2.6459379091818183
0.209 -> 2.3828843276000002
0.219 -> 2.3275099136999997
0.229 -> 2.4417235993636366
0.24 -> 2.4380506703
0.25 -> 2.5371588253000006
0.26 -> 2.4149494077000004
0.27 -> 2.2936866909000004
0.28 -> 2.437273469181818
0.291 -> 2.3236982016
0.301 -> 2.4022541664
0.311 -> 2.3130940562
0.321 -> 2.5310746604
0.331 -> 2.2081656021000002
0.341 -> 2.2971205086363637
0.352 -> 2.2664439074000002
0.362 -> 2.2577037961000004
0.372 -> 2.3274537939
0.382 -> 2.3944920092000004
0.392 -> 2.4642428165
0.402 -> 2.463620020181818
0.413 -> 2.3945957363000003
0.423 -> 2.4159163421
0.433 -> 2.4741425820000003
0.443 -> 2.5781124094999996
0.453 -> 2.4061227924
0.463 -> 2.465448882181818
0.474 -> 2.447893211090909
0.484 -> 2.4245401217
0.494 -> 2.5651068714000003
...