Armeija
Armeija

Reputation: 53

Summing day data values

I need help on my program with how to add up each day values. So far it looks like this

import csv

def convert(data):
    try:
        return int(data)
    except ValueError:
        return 0

with open('MonthData1.csv', 'r') as file1:
        read_file = csv.reader(file1, delimiter = ';')
        delheader = next(read_file)
        for line in read_file: 
            valuedata = max(0,sum([convert(i) for i in line[1:5]])) 
            print(line[0], valuedata)

At the moment it sums the 3 item values as it should:

1.5.2018 15:00 150
1.5.2018 20:00 95
2.5.2018 18:00 105
4.5.2018 17:00 78
4.5.2018 20:00 0
4.5.2018 20:00 9

But I want it to sum all the values of the same day, so it would be something like this:

1.5.2018 245
2.5.2018 105
4.5.2018 87

How could this be excecuted? I hope for help. Here is a pastebin from all the data used in this: https://pastebin.com/Tw4aYdPc
The base code is not mine originally, edited it a bit to match my needs.

Upvotes: 1

Views: 47

Answers (1)

Aurora Wang
Aurora Wang

Reputation: 1940

I used a defaultdict to sum your valuedatas and ordered it to print:

import csv
from collections import defaultdict, OrderedDict


def convert(data):
    try:
        return int(data)
    except ValueError:
        return 0


with open('MonthData1.csv', 'r') as file1:
        read_file = csv.reader(file1, delimiter=';')
        delheader = next(read_file)
        data = defaultdict(int)
        for line in read_file:
            valuedata = max(0, sum([convert(i) for i in line[1:5]]))
            data[line[0].split()[0]] += valuedata

        for key in OrderedDict(sorted(data.items())):
            print('{} {}'.format(key, data[key]))

EDIT: To calculate cumulative values:

import csv
from collections import defaultdict, OrderedDict


def convert(data):
    try:
        return int(data)
    except ValueError:
        return 0


with open('MonthData1.csv', 'r') as file1:
        read_file = csv.reader(file1, delimiter=';')
        delheader = next(read_file)
        data = defaultdict(int)
        for line in read_file:
            valuedata = max(0, sum([convert(i) for i in line[1:5]]))
            data[line[0].split()[0]] += valuedata

        previous_values = []
        for key, value in OrderedDict(sorted(data.items())).items():
            print('{} {}'.format(key, value + sum(previous_values)))
            previous_values.append(value)

Results:

1.5.2018 245

2.5.2018 350

4.5.2018 433

Upvotes: 1

Related Questions