如何在python中通过多个键聚合数据集?

时间:2016-05-12 08:56:39

标签: python django sum dataset aggregation

我想总结数据集,结合了唯一的密钥 (例如 - (曲目,歌手)。

例如:我有3个字段的数据集:track,singer,cnt 我想通过track& amp;汇总(汇总)数据。歌手,总结cnt领域。

sales = [
    {'singer': 'Smash',  'track':  'Cry', 'cnt': 10},
    {'singer': 'Smash',  'track':  'Cry', 'cnt': 11},
    {'singer': 'Smash',  'track':  'Dry', 'cnt': 2},
    {'singer': 'Scooter', 'track': 'Shy', 'cnt': 1},
    {'singer': 'Scooter', 'track': 'Die', 'cnt': 0},
]

我想要:

sales = [
    {'singer': 'Smash',  'track':  'Cry', 'cnt': 21},   <== summmarized
    {'singer': 'Smash',  'track':  'Dry', 'cnt': 2},
    {'singer': 'Scooter', 'track': 'Shy', 'cnt': 1},
    {'singer': 'Scooter', 'track': 'Die', 'cnt': 0},
]

感谢您的回复。

2 个答案:

答案 0 :(得分:1)

您基本上在寻找按<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta charset="UTF-8"> <title>Angular JS App</title> </head> <body> <div class="container" ng-controller="HomeController as homeCtrl"> <div id="content"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> </ul> </div> </div> </body> </html>Sum分组的cnt singer。在Django中,可以使用trackvalues in conjunction来实现。

所以尝试这样的事情:

annotate

答案 1 :(得分:0)

创建了我自己的解决方案:

# Aggregate dataset by multiple columns
# @source http://stackoverflow.com/questions/24286933/how-to-reduce-aggregate-a-list-of-dicts-per-multiple-keys-in-python
sales = [
    {'singer': 'Smash',   'track':  'Cry', 'cnt': 10},
    {'singer': 'Smash',   'track':  'Cry', 'cnt': 11},
    {'singer': 'Smash',   'track':  'Dry', 'cnt': 2},
    {'singer': 'Scooter', 'track':  'Shy', 'cnt': 1},
    {'singer': 'Scooter', 'track':  'Die', 'cnt': 0},
]

sales_gr = {}

for item in sales:

    key = str(''.join([item['track'], item['singer']]))
    if key not in sales_gr:
        sales_gr[key] = {'track': item['track'], 'singer':item['singer'], 'cnt':0}

    sales_gr[key]['cnt'] += item['cnt']

print(sales_gr)