【问题标题】:Grouping by with aggregating using different columns in Pandas使用 Pandas 中的不同列进行聚合分组
【发布时间】:2017-06-14 10:57:27
【问题描述】:

在 pandas 中有一个带有 ID 和交货天数的数据框(例如,每周 7 天):

我想使用 groupby() pandas 函数并创建以下内容 - 为每天创建 7 个不同的列(例如,delivery_day_1、delivery_day_2 等)并计算数据框中按 ID 分组的出现次数。怎么可能做到这一点?

谢谢。

【问题讨论】:

    标签: python pandas calculated-columns pandas-groupby


    【解决方案1】:

    我认为您首先需要 groupby + size + unstackcrosstab 进行整形。

    然后,如有必要,将缺少的 weekdays 添加到 reindex_axis 和最后一个 add_prefix

    示例:

    df = pd.DataFrame({'subscription_id':[1,2,3,1], 'delivery_weekday':[1,1,2,1]})
    
    print (df)
       delivery_weekday  subscription_id
    0                 1                1
    1                 1                2
    2                 2                3
    3                 1                1
    

    df = df.groupby(['subscription_id','delivery_weekday']) \
           .size() \
           .unstack(fill_value=0) \
           .reindex_axis(range(1,8), fill_value=0, axis=1) \
           .add_prefix('delivery_day_')
    
    print (df)
    delivery_weekday  delivery_day_1  delivery_day_2  delivery_day_3  \
    subscription_id                                                    
    1                              2               0               0   
    2                              1               0               0   
    3                              0               1               0   
    
    delivery_weekday  delivery_day_4  delivery_day_5  delivery_day_6  \
    subscription_id                                                    
    1                              0               0               0   
    2                              0               0               0   
    3                              0               0               0   
    
    delivery_weekday  delivery_day_7  
    subscription_id                   
    1                              0  
    2                              0  
    3                              0  
    

    df = pd.crosstab(df['subscription_id'],df['delivery_weekday']) \
           .reindex_axis(range(1,8), fill_value=0, axis=1) \
           .add_prefix('delivery_day_')
    print (df)
    
    delivery_weekday  delivery_day_1  delivery_day_2  delivery_day_3  \
    subscription_id                                                    
    1                              2               0               0   
    2                              1               0               0   
    3                              0               1               0   
    
    delivery_weekday  delivery_day_4  delivery_day_5  delivery_day_6  \
    subscription_id                                                    
    1                              0               0               0   
    2                              0               0               0   
    3                              0               0               0   
    
    delivery_weekday  delivery_day_7  
    subscription_id                   
    1                              0  
    2                              0  
    3                              0  
    

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 2019-10-12
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2017-04-20
      • 2012-09-17
      相关资源
      最近更新 更多