Have I coded this small object grouping script Pythonically?
list1 is a bad variable name. What is it actually storing? I know that it is a list, but I don't know what it is being used for.

It looks like this code is a snippet from a bigger block of code, but at least in this context, list1 is never being read. You should make sure the value is used later or remove the variable.

a is also a bad name. A single letter variable name is rarely a good variable name.



Comments:

for a in rows:
    date_time = a[12] #gets date_time

#strips date_time with regex to match the proper pattern format
#sample date_time from db "2014-07-07 11:10:18.867024-04"
    date_time = re.match(r'^.*?\.', date_time).group(0) 


Your comments should start at the same indentation level as the code. What you have now could make someone reading your code think there are two different blocks.

Most of your comments are saying what the code does. This is generally an indication that you need to make your code more descriptive. You can achieve this with better variable names and extracting chunks of code into well-named sub-functions. Comments are better suited at describing why something is being done.



if a == rows[-1]:
    source.append(a[11])
    list1.append(source)

else:
    if epoch - old_epoch &lt; 60:
        source.append(a[11])

    else:
        list1.append(source)
        source = []
        source.append(a[11])


You don't need the extra line after the if/else blocks.



source = []
source.append(a[11])


is the same as 

source = [a[11]]




pattern has a constant value, you can initialize it before the loop instead to resetting the value for every row.



if epoch - old_epoch &lt; 60:


60 is a magic number. What does it mean? If it were to change, you would have to find all the places 60 appears and check if it means the same thing as this context. If it has a name, you can just change the value once.