2012-06-15 14 views
10

listesini Özetle:Python - Grup tarafından ve aşağıdaki listeyi göz önüne alındığında küpe

[ 
    ('A', '', Decimal('4.0000000000'), 1330, datetime.datetime(2012, 6, 8, 0, 0)), 
    ('B', '', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 6, 4, 0, 0)), 
    ('AA', 'C', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 5, 31, 0, 0)), 
    ('B', '', Decimal('7.0000000000'), 1330, datetime.datetime(2012, 5, 24, 0, 0)), 
    ('A', '', Decimal('21.0000000000'), 1330, datetime.datetime(2012, 5, 14, 0, 0)) 
] 

ben demet içinde birinci, ikinci, dördüncü ve beşinci sütunlara göre grubu, bu ister ve 3. tanımlıyorsunuz. Bu örnekte, sütunları col1, col2, col3, col4, col5 olarak adlandıracağım.

select col1, col2, sum(col3), col4, col5 from my table 
group by col1, col2, col4, col5 

bunu yapmak için bir "cool" bir yolu var mı yoksa hepsi manuel döngü: SQL

Böyle bir şey yapsın ki?

cevap

6
>>> [(x[0:2] + (sum(z[2] for z in y),) + x[2:5]) for (x, y) in 
     itertools.groupby(sorted(L, key=operator.itemgetter(0, 1, 3, 4)), 
     key=operator.itemgetter(0, 1, 3, 4))] 
[ 
    ('A', '', Decimal('21.0000000000'), 1330, datetime.datetime(2012, 5, 14, 0, 0)), 
    ('A', '', Decimal('4.0000000000'), 1330, datetime.datetime(2012, 6, 8, 0, 0)), 
    ('AA', 'C', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 5, 31, 0, 0)), 
    ('B', '', Decimal('7.0000000000'), 1330, datetime.datetime(2012, 5, 24, 0, 0)), 
    ('B', '', Decimal('31.0000000000'), 1330, datetime.datetime(2012, 6, 4, 0, 0)) 
] 

(NOT: yeniden biçimlendirilmiş çıktı)

+0

Bu daha da iyi çalışır - Teşekkürler! – jbassking10

12

itertools.groupby öğesini istiyorsunuz. groupby yapmanız gerekebilir, böylece girdi, sıralanabilir beklediğini

Not elden önce:

keyfunc = lambda t: (t[0], t[1], t[3], t[4]) 
data.sort(key=keyfunc) 
for key, rows in itertools.groupby(data, keyfunc): 
    print key, sum(r[2] for r in rows) 
+3

'operator.itemgetter (0,1,3,4)' – JBernardo

+0

Teşekkürler - mükemmel çalışıyor! – jbassking10

1

Eğer bulursanız bunu Büyük veri kümeleri ile çok, bu tür şeyler yapmak için çok güzel tesisleri olan pandas kitaplığına bakmak isteyebilirsiniz.

İlgili konular