【问题标题】:Python pandas calculate share of after groupbyPython pandas计算groupby后的份额
【发布时间】:2021-07-25 22:53:57
【问题描述】:

我想按邮政编码对以下类型的数据集进行分组,并计算每种运输方式在每个邮政编码中所占的已完成订单份额。 我已经实现了一个 csv 文件并尝试了下面的代码,但我意识到我需要 MultiIndex ——因为我有很多不同的邮政编码,所以我不确定如何使用它。

postalcode shipping_method completed_orders
12345 post1 1
12345 post2 3
12345 post3 2
11123 post1 1
11123 post2 2
import numpy as np
import pandas as pd

shipping_data = pd.read_csv("shipping_per_postalcode.csv")

shareof = lambda x: x/x.sum()
result = shipping_data['amount_users_completed'].groupby(level=['postalcode', 'shipping_option']).transform(sumto)
print(result)

【问题讨论】:

    标签: python pandas pandas-groupby aggregation percentage


    【解决方案1】:

    您可能需要额外的 groupby 才能获得百分比贡献

    df_agg=df_1.groupby(['postalcode', 'shipping_method'])['completed_orders'].sum()
    
    df_agg.groupby(level=0).apply(lambda x: 100*x/float(x.sum()))
    

    来源:Pandas percentage of total with groupby

    【讨论】:

    • 哇,我真的为自己复杂了。非常感谢!
    • 不客气@SevgiCamuz!如果您发现它有用,请点赞答案:)
    • 默认! :) 你知道为什么完成订单份额的列名消失了吗?
    【解决方案2】:

    像这样?

    result = df['completed_orders'] / df.groupby(['postalcode'])['completed_orders'].transform(sum)
    
    # Out[43]:
    # 0    0.166667
    # 1    0.500000
    # 2    0.333333
    # 3    0.333333
    # 4    0.666667
    # Name: completed_orders, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2014-07-29
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多