【问题标题】:Summarize and aggregation of DataFrame in Python Pandas?Python Pandas 中 DataFrame 的总结和聚合?
【发布时间】:2021-04-06 20:25:24
【问题描述】:

我有如下数据框:

df = pd.DataFrame({"CLIENT" : ["1", "1", "2", "1", "1", "1"], 
                   "PRODUCT_ID" : [111, 112, 444, 555, 89, 765],
                   "AGREEMENT_ID" : [1443, 1443, 155, 888, 1443, 14543]})

我需要创建新的 DF 并为每个客户 (CLIENT) 计算每个协议 (AGREEMENT_ID) 的产品 (PRODUCT_ID) 的平均值、中值和最大值。我需要如下结果:

AVG = 1,666 因为 5 / 3
MED = 2,因为 CLIENT 1 在 1443 协议上有 3 个产品,在 888 协议上有 1 个产品,在 14543 协议上有 1 个产品,所以中位数 = 2 ???

【问题讨论】:

    标签: python pandas dataframe aggregation


    【解决方案1】:

    这里是代码。

    df_groupby = df.groupby(['CLIENT', 'AGREEMENT_ID'])['PRODUCT_ID'].count().reset_index(name='product_count')
    df_groupby = df_groupby.groupby(['CLIENT'])['product_count'].agg(['mean', 'median', 'max']).reset_index()
    df_groupby
    
    CLIENT  mean    median  max
    1   1.666667    1   3
    2   1.000000    1   1
    

    中位数为 1 而不是 2(如下所述)

    如果您按客户和协议 ID 分组,则客户 1 的 product_counts 值为 1,3,1(不是您的示例中提到的 1,3),这些值的中位数 (1,3,1) 为 1不是 2。

    df_groupby = df.groupby(['CLIENT', 'AGREEMENT_ID'])['PRODUCT_ID'].count().reset_index(name='product_count')
    df_groupby
    
    CLIENT  AGREEMENT_ID    product_count
    1       888             1
    1       1443            3
    1       14543           1
    2       155             1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-14
      • 2021-04-14
      • 2021-04-06
      • 2019-09-03
      • 2020-01-28
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多