Python:使用int作为键在字典中执行group by和SUM操作

时间:2018-08-27 02:36:36

标签: python-3.x pandas numpy dictionary

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 

请向我们推荐简单的方法。

2 个答案:

答案 0 :(得分:0)

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

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
    )
))

答案 1 :(得分:0)

我将执行以下操作:

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],依此类推。