【问题标题】:Grouping based on multiple columns, computing frequency, and percentage基于多列、计算频率和百分比的分组
【发布时间】:2021-02-22 02:58:00
【问题描述】:

比方说,我有以下数据框。

ID     Type   miles  
ID_1   Bus      2                    
ID_2   Taxi     3
ID_1   Bus      8
ID_2   Taxi     5   
ID_1   Car      6
ID_3   Train    5       
ID_4   Tram     7

我想将IDType 分组并在miles 上求和。然后创建新列mile_sum

然后,我想统计IDType 的出现次数,并将其放在新创建的“频率”列中。

最后我想从 Total 中计算出他们的百分比,然后放到新创建的“Percentage”列中。

ID    Type    mile_sum   Frequency    Percentage
ID_1  Bus       10          2             28.5%                        
ID_2  Taxi      8           2             28.5%
ID_1  Car       6           1             14%
ID_3  Train     5           1             14%        
ID_4  Tram      7           1             14% 

有人可以在 Pandas Python 中帮助解决这个问题吗?

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    使用GroupBy.agg 和命名聚合来填充由sumcounts 填充的新列,然后创建新列,除以sum,乘以100,最后在必要时使用Series.round

    df = (df.groupby(['ID','Type'], sort=False, as_index=False)
            .agg(mile_sum = ('miles','sum'), Frequency = ('miles','size')))
    df['Percentage'] = df['Frequency'].div(df['Frequency'].sum()).mul(100).round(1)
    print (df)
         ID   Type  mile_sum  Frequency  Percentage
    0  ID_1    Bus        10          2        28.6
    1  ID_2   Taxi         8          2        28.6
    2  ID_1    Car         6          1        14.3
    3  ID_3  Train         5          1        14.3
    4  ID_4   Tram         7          1        14.3
    

    如果需要数字使用百分比:

    df['Percentage'] = df['Percentage'].astype(str) + '%'
    print (df)
         ID   Type  mile_sum  Frequency Percentage
    0  ID_1    Bus        10          2      28.6%
    1  ID_2   Taxi         8          2      28.6%
    2  ID_1    Car         6          1      14.3%
    3  ID_3  Train         5          1      14.3%
    4  ID_4   Tram         7          1      14.3%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多