【问题标题】:Python: Perform group by & SUM operation in the dictionary using int as a keysPython:使用 int 作为键在字典中执行 group by & SUM 操作
【发布时间】:2019-02-01 13:18:23
【问题描述】:
input={1:5,2:8,9:3,11:4,18:3,21:4,3:8}

我想按操作进行分组并在

上执行求和操作

那些字典中的值..

like grp_1=1,2,3 ; grp_2=9,11,18 ; grp_3= 21

输出应该如下所示

grp_1= 21 (5+8+8 dict values)

grp_2= 10 (3+4+3 dict values)

grp_3= 4 

请给我们建议简单的方法..

【问题讨论】:

  • 组是否以任何特定方式形成?就像它们是由一些连续的逻辑箱定义的吗?
  • 是的,它由以下代码组成:a= [1,1,1,2,2,2,1,3,4,5,5,5,8,8,8, 79] counted = defaultdict(int) for i,v in enumerate(a): input[v] += 1 print(input) like this..
  • 要计算列表中的元素,您可以使用Counter from collections: counted = collections.Counter(a)。你的意思是counted[v] 而不是input[v]
  • 我认为@ALollz 询问的是您选择的 的性质。有什么可以确定 1,2,3 进入 grp_1 和 9,11,18 进入 grp_2?它是完全任意的吗?是每三个不同的观察值按顺序形成一个组吗?等等。

标签: python-3.x pandas numpy dictionary


【解决方案1】:

我会这样做:

import pandas as pd
# initial data
sr = pd.Series({1:5,2:8,9:3,11:4,18:3,21:4,3:8})
groups = [[1,2,3],[9,11,18],[21]]

# we will save the sums in this list
finalsum = []                   
for i in groups:  
    finalsum.append(sr[sr.index.isin(i)].sum())

所以groups[0] 的总和将是finalsum[0] 等等。

【讨论】:

    【解决方案2】:

    从示例中,我猜您想在按键排序的字典中形成恒定大小的组。在这种情况下,您可以首先对键进行排序,获取值,生成所需大小的块并对每个块求和。我在标准库中找不到能够从迭代器产生块的工具,因此我在这里使用more_itertools 模块作为建议here

    import more_itertools as mit
    
    d = {1: 5, 2: 8, 9: 3, 11: 4, 18: 3, 21: 4, 3: 8}
    
    group_sums = list(map(
        sum,
        mit.more.chunked(
            (d[k] for k in sorted(d.keys())),
            3
        )
    ))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2010-11-19
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多