首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组织语法中的范畴聚合

组织语法中的范畴聚合
EN

Stack Overflow用户
提问于 2016-11-29 16:04:19
回答 1查看 83关注 0票数 1

这是SO Two-dimensional aggregation in Histogrammar的后续问题(Jim从一个私人电子邮件问题中创建了这个条目):

发自:

代码语言:javascript
复制
data = [{"item": 'ball', "qty": 3.0}, 
        {"item": 'whistle', "qty": 2.0}, 
        {"item": 'ball', "qty": 5.0}]

我希望使用组织语法获得和聚合,即

代码语言:javascript
复制
ball: 8.0
whistle: 20

按照http://histogrammar.org/docs/tutorials/python-numpy/#histogrammar-in-numpy和Jim在这里提到的建议,我尝试:

代码语言:javascript
复制
import histogrammar as hg
data = [{"item": 'ball', "qty": 3.0}, {"item": 'whistle', "qty": 2.0}, {"item": 'ball', "qty": 5.0}]

h = hg.Categorize(quantity=lambda d: d.item, value=hg.Sum(lambda d: d.qty))
for datum in data:
   h.fill(datum)

 print h.toJson()

我得到:

代码语言:javascript
复制
AttributeError: 'dict' object has no attribute 'item'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 16:11:40

这只是Python的一个问题:因为示例中的每个数据都有以下形式

代码语言:javascript
复制
{"item": X, "qty": Y}

访问它的方法是使用d["item"]d["qty"],而不是使用d.itemd.qty

所以

代码语言:javascript
复制
h = hg.Categorize(quantity=lambda d: d["item"], value=hg.Sum(lambda d: d["qty"]))
for datum in data:
    h.fill(datum)

print h.toJsonString()

结果:

代码语言:javascript
复制
{"data": {"bins:type": "Sum", "bins": {"whistle": {"sum": 2.0, "entries": 1.0},
 "ball": {"sum": 8.0, "entries": 2.0}}, "entries": 3.0}, "version": "1.0",
 "type": "Categorize"}

如果您更改了表示数据的方式,则必须更改从每个datum中提取数据的方式。

顺便提一句,组织语法-Python有一个基于字符串的快捷方式,它将字段提取为属性(正如您试图做的那样)或作为项(正如我前面所做的)。以下两种数据都适用于这两种数据:

代码语言:javascript
复制
h = hg.Categorize("item", hg.Sum("qty"))

如果data是一维Numpy数组的字典(或者相当于Numpy记录数组;我不记得那里是否也有Pandas钩子),这个基于字符串的方法也能工作。在这种情况下,您将声明直方图完全如上,但填写如下:

代码语言:javascript
复制
h.fill.numpy(data)

不同的填充方法对字符串的解释不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40870369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档