Python 将总列的百分比添加到表中

Python 将总列的百分比添加到表中,python,pandas,Python,Pandas,我似乎不知道如何在下表中添加每个date_submitted组的总列百分比: In [177]: pass_rate_pivot date_submitted audit_status 04-11-2014 audited 140 is_adserver 7 rejected 75 unauditable 257 04-18-2014

我似乎不知道如何在下表中添加每个date_submitted组的总列百分比:

In [177]: pass_rate_pivot

date_submitted  audit_status
04-11-2014      audited         140
                is_adserver       7
                rejected         75
                unauditable     257
04-18-2014      audited         177
                is_adserver      10
                pending          44
                rejected         30
                unauditable     226
04-25-2014      audited          97
                is_adserver       5
                pending          33
                rejected          9
                unauditable     355
Name: site_domain, dtype: int64

In [177]: pass_rate_pivot.to_dict()


Out[177]:
{('04-11-2014', 'audited'): 140,
 ('04-11-2014', 'is_adserver'): 7,
 ('04-11-2014', 'rejected'): 75,
 ('04-11-2014', 'unauditable'): 257,
 ('04-18-2014', 'audited'): 177,
 ('04-18-2014', 'is_adserver'): 10,
 ('04-18-2014', 'pending'): 44,
 ('04-18-2014', 'rejected'): 30,
 ('04-18-2014', 'unauditable'): 226,
 ('04-25-2014', 'audited'): 97,
 ('04-25-2014', 'is_adserver'): 5,
 ('04-25-2014', 'pending'): 33,
 ('04-25-2014', 'rejected'): 9,
 ('04-25-2014', 'unauditable'): 355}

最自然的方法是在创建透视表时执行。这里我假设date_submitted是一列(不在索引中),使用
reset_index
。并确保您的值在一列中(这里我称之为“value_col”)。然后

这是你想要的吗?(对于将元素除以该组中所有元素之和的每个组):

如果您想将其添加为一列,您确实可以按照@exp1orer的建议将两个系列都添加到一个数据帧中:

pd.concat([pass_rate_pivot,pass_rate_pivot_pct], axis=1)

如果
pass\u rate\u pivot
已经是一个数据帧,您可以只分配一个新列,如
pass\u rate\u pivot['pct']=pass\u rate\u pivot['original column'].groupby(…

要进行分组,分组不需要是列,也可以是索引或索引级别(最后一个例子中的
级别
kwarg)你完全正确。我感到困惑,因为我最近试图同时按索引级别和列进行分组,这是不允许的(如果错误,请更正)。编辑以反映这一点。OP希望将它们放在同一个表中,我相信,添加
pandas.concat([pass\u rate\u pivot,pass\u rate\u pivot\u pct],axis=1)
到代码的末尾?在master/0.14中,您将能够执行
df.groupby(level=0)。秩(pct=True)
@Jeff
rank
我认为仍然是另一回事(它给出了排序顺序)
In [62]: pass_rate_pivot.groupby(level=0).transform(lambda x: x/x.sum())
Out[62]: 
04-11-2014  audited        0.292276
            is_adserver    0.014614
            rejected       0.156576
            unauditable    0.536534
04-18-2014  audited        0.363450
            is_adserver    0.020534
            pending        0.090349
            rejected       0.061602
            unauditable    0.464066
04-25-2014  audited        0.194389
            is_adserver    0.010020
            pending        0.066132
            rejected       0.018036
            unauditable    0.711423
dtype: float64
pd.concat([pass_rate_pivot,pass_rate_pivot_pct], axis=1)