[英]Pandas: make pivot table with 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,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 您可以在pivot_table
使用總和值的參數margins
,然后將最后一行的All
值All
除以div
:
group = pd.pivot_table(df,
index='used_at',
columns='domain',
values='ID',
aggfunc=len,
margins=True)
print (group)
domain avito.ru mazdaspb.ru vw-stat.ru All
used_at
2015-01 3.0 3.0 5.0 11.0
All 3.0 3.0 5.0 11.0
print (group.iloc[:-1])
domain avito.ru mazdaspb.ru vw-stat.ru All
used_at
2015-01 3.0 3.0 5.0 11.0
print (group.iloc[-1])
domain
avito.ru 3.0
mazdaspb.ru 3.0
vw-stat.ru 5.0
All 11.0
Name: All, dtype: float64
print (group.iloc[:-1].div(group.iloc[-1], axis=1) * 100)
domain avito.ru mazdaspb.ru vw-stat.ru All
used_at
2015-01 100.0 100.0 100.0 100.0
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
另一種方法是使用 pd.crosstab,它具有與數據透視表類似的輸入。
這包括一個參數 normalize=False(默認設置)。
您可以將其更改為 normalize=True 並提供總數的百分比。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.