2016-10-28 6 views
0

와 피벗 테이블을 내가 피벗 테이블을 얻을 필요가 팬더는 : 비율

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 

dataframe

이 있고, 모든 고유 ID의 비율의 값이어야한다있다. 내가

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

얻을 수 있지만 매달마다 도메인에 고유 한 ID의 양을 반환합니다. 어떻게 퍼센트로 변환 할 수 있습니까?

답변

1

IIUC 당신은 pivot_table에서 합계 값에 대한 매개 변수 margins를 사용하고 div 모든 값을 마지막 행 All를 나눌 수 있습니다 : divmul 개별 계산으로 나누기와

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 
+0

좋다고! 고맙습니다!) –

1

얻은 개별 카운트 값을 DF의 총 행 수로 나눠서 분배율을 구하십시오. 로 표시 기 :

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

Image