分组,计数,然后排序的最有效方法?

Posted

技术标签:

【中文标题】分组,计数,然后排序的最有效方法?【英文标题】:Most efficient way to group, count, then sort? 【发布时间】:2017-03-31 03:30:40 【问题描述】:

数据是两列,城市,我需要根据sum按城市分组。

表格看起来像这样(一百万次):

City, People
Boston, 1000
Boston, 2000
New York, 2500
Chicago, 2000

在这种情况下,波士顿将拥有 3000 人,排名第一。我需要返回前 5% 的城市及其人数(总和)。

最有效的方法是什么?熊猫可以很好地扩大规模吗?我应该跟踪前 5% 还是在最后进行排序?

【问题讨论】:

如果是bigdata,你不认为你应该考虑使用pyspark吗? 【参考方案1】:

如果您希望在没有外部库的情况下使用 Python,您可以执行以下操作。首先,我用csv 打开文件。然后我们可以使用内置的sorted 函数在自定义键处对我们的数组进行排序(基本上,检查第二个元素)。然后我们用[] 抓取我们想要的部分。

import csv, math

out = []
with open("data.csv","r") as fi:
    inCsv = csv.reader(fi,delimiter=',')
    for row in inCsv:
        out.append([col.strip() for col in row])
print (sorted(out[1:], key=lambda a: a[1], reverse=True)[:int(math.ceil(len(out)*.05))])

【讨论】:

【参考方案2】: groupby 得到总和 rank 获取分数
df = pd.read_csv(skipinitialspace=True)
d1 = df.groupby('City').People.sum()
d1.loc[d1.rank(pct=True) >= .95]

City
Boston    3000
Name: People, dtype: int64

【讨论】:

以上是关于分组,计数,然后排序的最有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

查找与排序:计数排序

SAS中如何分组计数,并将值保存到宏变量

如何按列值的计数进行分组并对其进行排序?

常用排序算法基数排序桶排序以及计数排序

hive 排序 分组计数后排序 几种不同函数的效果

关于dt分组计数排序的实例