>source

'zone_id 및 eventName'이라는 두 열의 데이터 프레임별로 그룹화하고 있습니다. zone_id로 그룹화 된 eventName의 백분율을 계산해야합니다.

즉, zone_id로 계산 (클릭/인쇄) * 100해야합니다.

import pandas as pd
#read the csv file
df = pd.read_csv('data.csv', sep=';')
result=df.groupby(['zone_id','eventName']).event.count()
print(result)
#I use count() method to extract the number of clicked and printed by zone_id. Then on this basis I think to be able to find a way to compute a     percentage by zone_id.
output : 
zone_id  eventName
28       printed         88
9283     clicked         197
         printed         7732
9284     clicked         2
         printed         452
9287     clicked         129
         printed         3802
9614     clicked         4
         printed         342
17437    clicked         55
         printed         4026
#By using mean() function, the mean calculation is well done grouped by zone_id
result=df.groupby(['zone_id','eventName']).event.count().groupby('zone_id').mean()
print(result)
output :
zone_id
28         88.0
9283     3964.5
9284      227.0
9287     1965.5
9614      173.0
17437    2040.5
#Expected result : I need to compute the percentage of eventName (clicked/printed)*100 by zone_id
 Expected output:
zone_id
28        0%    -> (0/88)*100
9283      2.54% -> (197/7732)*100
9284      0.44% -> (2/452)*100
9287      3.39% -> (129/3802)*100
9614      1.16% -> (4/342)*100
17437     1.36% -> (55/4026)*100


  • 답변 # 1

    샘플 데이터 없이는보기가 어렵지만 이런 식으로 시도해보십시오?

    events = df.groupby(['zone_id','eventName']).size()
    events.loc[pd.IndexSlice[:, 'printed']] / events.loc[pd.IndexSlice[:, 'clicked']]
    
    

    unstack을 사용하여 클릭하여 열로 인쇄 :

    events = df.groupby(['zone_id','eventName']).size().unstack(level=1)
    events['printed'] / events['clicked']
    
    

관련 자료

  • 이전 python - 모듈 별명을 변경하여 함수 호출을 자동으로 업데이트
  • 다음 for 루프 r에서 요소 참조