【问题标题】:Pandas pivot_table to calculate share of marginPandas pivot_table 计算保证金份额
【发布时间】:2016-09-29 15:24:58
【问题描述】:

我有一个名为 dfPandas DataFrame,其中包含 n columnscolumns 之一被命名为COUNT,它显示了A 中的值出现了多少次。 A 包含唯一标识符,因此每一行在 column COUNT 中都有值 1。它看起来像这样:

 A      B       C       D   E       COUNT
id1     cat1    1       a   15      1       
id2     cat2    2       b   14      1
id3     cat2    2       c   14      1
id4     cat1    1       d   15      1
id5     cat3    2       e   14      1
.....

现在我想把我的df 变成这样:

                14      15      
cat1_tot        NaN     2       
cat1_share      NaN     1       
cat2_tot        2       NaN     
cat2_share      0.6666  NaN     
cat3_tot        1       NaN     
cat3_share      0.3333  NaN
All             3       2

我可以通过pd.pivot_table得到catx_tot

pd.pivot_table(
     df, 
     values='COUNT', 
     index=['B'], 
     columns=['E'], 
     margins=True, 
     aggfunc=np.sum
)

但是我该如何添加分享呢?

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    groupby.sizegroupby.transform 结合起来

    size = df.groupby(['B', 'E']).size()
    sums = size.groupby(level='E').transform(np.sum)
    aggd = pd.concat([size, size / sums], axis=1, keys=['total', 'share'])
    
    aggd.unstack().stack(0)
    


    获取All

    all_ = aggd.groupby(level='E').sum().total.rename(('All', 'total'))
    aggd.unstack().stack(0).append(all_)
    

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 1970-01-01
      • 2017-08-01
      • 2019-11-10
      • 2023-04-07
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      相关资源
      最近更新 更多