分组,计数,然后排序的最有效方法?
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
【讨论】:
以上是关于分组,计数,然后排序的最有效方法?的主要内容,如果未能解决你的问题,请参考以下文章