【问题标题】:How to find sum of count, grouped by the id?如何找到按id分组的计数总和?
【发布时间】:2017-08-12 03:37:24
【问题描述】:

我想获得以下问题的输出。 我有以下数据类型:

id      start        end       count     Time      Train
001     Paris      London        01      05:00      Yes
001     Paris      London        01      05:00      Yes
002     Prague     Vienna        15      15:00      No
003     Frankfurt  London        01      17:00      Yes
015     Paris      London        08      21:00      No
019     Barcelona  Vienna        15      15:00      No
003     Frankfurt  London        01      07:00      Yes
002     Prague     Vienna        15      05:00      No

我想找到按 id 分组的计数总和。还要忽略具有相同 id、start 和 end 的行。另外我有一个 4 GB 的数据,我想找到前 5 个计数的开始和结束城市。谢谢。

我希望得到与此类似的数据的输出,

 Prague -> Vienna     Count : 15
 Barcelona -> Vienna  count : 15
 Paris --> london     Count : 09
 Frankfurt -> London  Count:  02
.....

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您可以使用drop_duplicates + groupby 聚合sum

    df['count'] = df['count'].astype(int)
    df = df.drop_duplicates(['id','start','end'])
    print (df)
        id      start     end  count   Time Train
    0  001      Paris  London      1  05:00   Yes
    2  002     Prague  Vienna     15  15:00    No
    3  003  Frankfurt  London      1  07:00   Yes
    4  015      Paris  London      8  21:00    No
    5  019  Barcelona  Vienna     15  15:00    No
    

    df1 = df.groupby('id', as_index=False)['count'].sum()
    print (df1)
        id  count
    0  001      1
    1  002     15
    2  003      1
    3  015      8
    4  019     15
    
    df11 = df.groupby(['id', 'start', 'end'], as_index=False)['count'].sum()
    print (df11)
        id      start     end  count
    0  001      Paris  London      1
    1  002     Prague  Vienna     15
    2  003  Frankfurt  London      1
    3  015      Paris  London      8
    4  019  Barcelona  Vienna     15
    
    df12 = df.groupby(['start', 'end'], as_index=False)['count'].sum()
    print (df12)
           start     end  count
    0  Barcelona  Vienna     15
    1  Frankfurt  London      1
    2      Paris  London      9
    3     Prague  Vienna     15
    

    对于最高值,请使用 nlargest:

    df2 = df.nlargest(5, 'count')[['start','end']]
    print (df2)
           start     end
    2     Prague  Vienna
    5  Barcelona  Vienna
    4      Paris  London
    0      Paris  London
    3  Frankfurt  London
    

    【讨论】:

    • 谢谢!是否可以根据开始和结束对输出进行排名?
    • 我不确定是否理解,你需要facorize吗? link
    • id 001 和 015 有相似的开始和结束,所以我想知道它们的总数!
    • 请检查已编辑的答案 - 你认为 groupby 由 3 列 idstartend 组成吗?
    【解决方案2】:
    SELECT T.* FROM
    (
        SELECT *,COUNT(id) AS count FROM TABLE1 GROUP BY id,start,end
    ) T 
    GROUP BY id ORDER BY count DESC LIMIT 0,5
    

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 2012-11-02
      • 2015-06-01
      • 1970-01-01
      • 2019-10-27
      • 2021-04-13
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多