Python 熊猫:使用百分比创建透视表

Python 熊猫:使用百分比创建透视表,python,pandas,unique,pivot-table,percentage,Python,Pandas,Unique,Pivot Table,Percentage,我有数据帧 ID,url,used_at,active_seconds,domain 61a77f9e5fd52a50c10cd2d4d886ec68,mazdaspb.ru,2015-01,6,mazdaspb.ru 61a77f9e5fd52a50c10cd2d4d886ec68,mazdaspb.ru/cars/mazda-cx-5/crossover/overview,2015-01,12,mazdaspb.ru 61a77f9e5fd52a50c10cd2d4d886ec68,mazd

我有数据帧

ID,url,used_at,active_seconds,domain
61a77f9e5fd52a50c10cd2d4d886ec68,mazdaspb.ru,2015-01,6,mazdaspb.ru
61a77f9e5fd52a50c10cd2d4d886ec68,mazdaspb.ru/cars/mazda-cx-5/crossover/overview,2015-01,12,mazdaspb.ru
61a77f9e5fd52a50c10cd2d4d886ec68,mazdaspb.ru/cars/mazda-cx-5/crossover/overview,2015-01,19,mazdaspb.ru
61a77f9e5fd52a50c10cd2d4d886ec68,vw-stat.ru,2015-01,40,vw-stat.ru
61a77f9e5fd52a50c10cd2d4d886ec68,vw-stat.ru/models/new_tiguan,2015-01,12,vw-stat.ru
61a77f9e5fd52a50c10cd2d4d886ec68,vw-stat.ru/models/new_tiguan/comps,2015-01,48,vw-stat.ru
61a77f9e5fd52a50c10cd2d4d886ec68,vw-stat.ru/models/new_tiguan/comps/new_tiguan_track_field,2015-01,4,vw-stat.ru
61a77f9e5fd52a50c10cd2d4d886ec68,vw-stat.ru/models/new_tiguan/comps/new_tiguan_track_field?engine_type=DIESEL&DIESEL=engines_4e53a3c8e986d,2015-01,78,vw-stat.ru
41c2fd7a372729dfe336e44730169f28,avito.ru/saratov/avtomobili_s_probegom/volkswagen/golf?f=188_886b887,2015-01,8,avito.ru
41c2fd7a372729dfe336e44730169f28,avito.ru/saratov/avtomobili_s_probegom/volkswagen/golf?f=188_886b887,2015-01,1,avito.ru
41c2fd7a372729dfe336e44730169f28,avito.ru/saratov/avtomobili_s_probegom/volkswagen/golf?f=188_886b887,2015-01,2,avito.ru
我需要创建透视表,并且应该有所有唯一ID的百分比值。 我可以

group = pd.pivot_table(df, index='used_at', columns='domain', values='ID', aggfunc=(lambda x: x.count()))

但它每月返回每个域的唯一ID数量。如何将其转换为百分比?

IIUC您可以使用参数
margins
对中的和值进行计算,然后将最后一行的所有值
all
除以:

用和除以单个计数的解决方案:


将获得的单个计数值除以
DF
的总行数,得到其百分比分布,如图所示:

func = lambda x: 100*x.count()/df.shape[0]
pd.pivot_table(df, index='used_at', columns='domain', values='ID', aggfunc=func)

另一种方法是使用pd.crosstab,它的输入与可旋转数据集类似

这包括一个参数normalize=False(默认设置)

您可以将其更改为normalize=True,并提供总数的百分比

group = pd.pivot_table(df, 
                       index='used_at',
                       columns='domain', 
                       values='ID', 
                       aggfunc=len)
          .div(len(df.index))
          .mul(100)
print (group)

domain    avito.ru  mazdaspb.ru  vw-stat.ru
used_at                                    
2015-01  27.272727    27.272727   45.454545
func = lambda x: 100*x.count()/df.shape[0]
pd.pivot_table(df, index='used_at', columns='domain', values='ID', aggfunc=func)