从pandas groupby

时间:2017-12-27 07:11:36

标签: python python-2.7 pandas

我在数据集中有两列:

1)Supplier_code

2)Item_code

我使用以下方式对它们进行分组:

data.groupby(['supplier_code', 'item_code']).size()

我得到的结果如下:

supplier_code  item_code
591495         127018419     9
               547173046     1
3024466        498370473     1
               737511044     1
               941755892     1
6155238        875189969     1
13672569       53152664      1
               430351453     1
               573603000     1
               634275342     1
18510135       362522958     6
               405196476     6
               441901484    12
29222428       979575973     1
31381089       28119319      2
               468441742     3
               648079349    18
               941387936     1

我的前15家供应商使用:

supCounter = collections.Counter(datalist[3])
supDic = dict(sorted(supCounter.iteritems(), key=operator.itemgetter(1), reverse=True)[:15]) 
print supDic.keys()

这是我的前15名供应商名单:

[723223131, 687164888, 594473706, 332379250, 203288669, 604236177, 
533512754, 503134099, 982883317, 147405879, 151212120, 737780569, 561901243, 
786265866, 79886783]

现在我想加入这两个,即groupby,只获得前15名供应商和项目计数。

请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:2)

IIUC,您可groupby supplier_code,然后sumsort_values。进入前15名,你就完成了。

例如,使用:

gb_size = data.groupby(['supplier_code', 'item_code']).size()

然后:

N = 3 # change to 15 for actual data
gb_size.groupby("supplier_code").sum().sort_values(ascending=False).head(N)

输出:

supplier_code
31381089    24
18510135    24
591495      10
dtype: int64