聚合json导致python

时间:2017-10-15 17:58:27

标签: python

我有一个通过json以

形式导入的列表
  [{'beer/ABV': 5.0,
  'beer/beerId': '47986',
  'beer/brewerId': '10325',
  'beer/name': 'Sausa Weizen',
   ...

包括哪些顾客喝了哪种啤酒及其评级。我想计算每种啤酒的平均评分。在python中执行此操作的最有效方法是什么?我可以使用numpy或scipy。

2 个答案:

答案 0 :(得分:1)

调用您的列表beer_json,并假设beer/ABV为评分:

import numpy as np

beer_ratings = {}
for beer in {beer_info['beer/beerId'] for beer_info in beer_json}:
    ratings = [beer_info['beer/ABV']
               for beer_info in beerjson
               if beer_info['beer/beerId'] == beer]
    beer_ratings[beer] = np.mean(ratings)

这会迭代每个啤酒一次(使用它的beerId),然后创建一个仅包含该特定啤酒评级的列表ratings,并计算平均值。

我不能保证这是最有效的方法,但是因为你使用Python我猜测效率不是首要任务。

答案 1 :(得分:1)

我认为这应该做你想要的(你必须首先安装pandas):

import pandas

beers = [
    {'beer/beerId': '789', 'beer/ABV': 5.0, 'beer/name': 'Sausa Weizen'},
    {'beer/beerId': '789', 'beer/ABV': 4.0, 'beer/name': 'Sausa Weizen'},
    {'beer/beerId': '789', 'beer/ABV': 3.0, 'beer/name': 'Sausa Weizen'},
    {'beer/beerId': '123', 'beer/ABV': 1.0, 'beer/name': 'Bud Light'},
    {'beer/beerId': '123', 'beer/ABV': 2.0, 'beer/name': 'Bud Light'}
    ]
df = pandas.DataFrame(beers)
df.groupby(['beer/beerId']).mean()