Search code examples
pythonlistgroup-bypython-itertools

itertool group dynamic element in list python


I have a list of lists with multi columns:

column = [id, date,col1, col2...coln]
list_OfRows = [[1,date1, 10,20 ...23],
              [1,date1, 1,10 ...33],
              [2,date2, 3,7...8],
              [2,date2, 21,9...23],
              [2,date3, 10,56 ...20],
              [2,date4, 10,20 ...42]]

I want to group by on id and date and do sum on cols WITHOUT USING PANDAS

RESULT = [[1,date1, 11,30 ...56],
         [2,date2, 24,16...31],
         [2,date3, 10,20 ...20],
         [2,date4, 10,20 ...42]]

Solution

  • You can do it like this:

    from itertools import groupby
    
    
    list_OfRows.sort(key=lambda x: x[:2])
    res = []
    for k, g in groupby(list_OfRows, key=lambda x: x[:2]):
        res.append(k + list(map(sum, zip(*[c[2:] for c in g]))))
    

    which produces:

    [[1, 'date1', 11, 30, 56], 
     [2, 'date2', 24, 16, 31], 
     [2, 'date3', 10, 56, 20], 
     [2, 'date4', 10, 20, 42]]