【问题标题】: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吗?

标签: python pandas bigdata


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2012-10-04
      相关资源
      最近更新 更多