Hi all,

I tried reading http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/334695
on the same subject, but it didn't work for me.  I'm trying to learn
how to make pivot tables from some excel sheets and I am trying to
abstract this into a simple sort of example.  Essentially I want to
take input data like this:

Name  Time of day  Amount
Bob   Morn            240
Bob   Aft               300
Joe   Morn             70
Joe   Aft                80
Jil   Morn              100
Jil   Aft                 150

And output it as:

Name  Total    Morning  Afternoon
Bob    540      240        300
Joe     150      70          80
Jil       250     100        150
Total   940      410        530

The writing the output part is the easy part.  However, I have a
couple problems.  1) Grouping by name seems to work perfectly, but
working by time does not.  ie

I will get:
Bob
        240
        300
Joe
        70
        80
Jil
        100
        150
which is great but...
Morn
        240
Aft
        300
Morn
        70
Aft
        80
Morn
        100
Aft
        150
And not
Morn
        240
        70
        100
Aft
       300
       80
       150

2) I can't figure out how to sum these values because of the
iteration.  I always get an error like: TypeError: iteration over non-
sequence

Here's the code:

from itertools import groupby

data = [['Bob', 'Morn', 240],['Bob', 'Aft', 300],['Joe', 'Morn', 70],
['Joe', 'Aft', 80],\
            ['Jil', 'Morn', 100],['Jil', 'Aft', 150]]

NAME, TIME, AMOUNT=range(3)
for k, g in groupby(data, key=lambda r: r[NAME]):
    print k
    for record in g:
        print "\t", record[AMOUNT]
for k, g in groupby(data, key=lambda r: r[TIME]):
    print k
    for record in g:
        print "\t", record[AMOUNT]

Thanks for any comments
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to