2017-11-22 11 views
0

私は現在、比率で作業していますが、問題を抱えています。Python | Groupby |ピボット|パーセンテージを使用する

以下

は、私が働いているデータの小さなサンプルである下記より文脈与える[Instagramの、メッセンジャーなどのような他のプラットフォームがあります]:

Date  Reach Impressions Clicks Landing_Page Platform 
30/05/2017 27447 27939  90  68    Facebook 
30/05/2017 24299 24318  80  44    Facebook 
30/05/2017 9897 10081  33  25    Facebook 
30/05/2017 11696 11721  33  21    Facebook 
30/05/2017 53  55   1      Facebook 
31/05/2017 46632 68757  213  143    Facebook 
31/05/2017 67478 73401  650  424    Facebook 
31/05/2017 38831 47577  136  77    Facebook 
31/05/2017 46834 52449  135  77    Facebook 
31/05/2017 273  531   12  10    Facebook 
1/06/2017 48307 72141  221  150    Facebook 
1/06/2017 64122 79501  202  106    Facebook 
1/06/2017 66810 71033  843  575    Facebook 
1/06/2017 46225 50003  138  76    Facebook 
1/06/2017 496  1043  16  15    Facebook 

は、私は、新しい列を作成しました:

df["Click_To_Landing_Ratio] = df["Landing_Page]/df["Clicks"] * 100

私は次のことを試してみました:

round(df.pivot_table(index="Date", columns="Platform", values="Click_To_Landing_Ratio"), 3) 

round(df.groupby(["Date", "Platform"], axis=0)["Click_To_Landing_Ratio"].mean().unstack(), 3) 

私はエクセルでこれを回転さ(算出列を作成します)私はパンダでこれを回転またはGROUPBYとき、私は

Row Labels Facebook Grand Total 
30/05/2017 66.67%  66.67% 
31/05/2017 63.79%  63.79% 
1/06/2017 64.93%  64.93% 
2/06/2017 63.98%  63.98% 

を取得し、私が取得:

Row Labels Facebook Grand Total 
30/05/2017 53.990%  53.990% 
31/05/2017 65.871%  65.871% 
1/06/2017 67.476%  67.476% 
2/06/2017 64.031%  64.031% 

私はパンダが平均化されて推測していますその日の行の値は、excelが合計を作成し、合計エントリーでそれをダイビングします(それが意味をなさない場合)。要するに

、私の質問は以下のとおりです。

  1. あなたは、個々の行の比率(パーセンテージ)がある場合は、Excelで同じ結果を複製する方法があるが、パンダに?
  2. Pandas(marginins = True)と同様のgroupbyを使って合計を得ることができますか?

ご協力いただければ幸いです。

答えて

1

ここで問題となっているのは、毎日のClick to Landing値を誤って平均しているのに対し、Excelは1日あたりのクリック数とランディングページの訪問数を合計して除算することによって平均を計算しています。

あなたは(私はpivot_tableaggfunc='sum'を渡されました注意してください)あなたのpivot_tableを作成し、一日あたりの値を合計することによってpandasで同じことを行うことができます。次に除算を適用して平均を求めることができます。

df 
      Date Reach Impressions Clicks Landing_Page Platform 
0 30/05/2017 27447  27939  90   68 Facebook 
1 30/05/2017 24299  24318  80   44 Facebook 
2 30/05/2017 9897  10081  33   25 Facebook 
3 30/05/2017 11696  11721  33   21 Facebook 
4 30/05/2017  53   55  1    0 Facebook 
5 31/05/2017 46632  68757  213   143 Facebook 
6 31/05/2017 67478  73401  650   424 Facebook 
7 31/05/2017 38831  47577  136   77 Facebook 
8 31/05/2017 46834  52449  135   77 Facebook 
9 31/05/2017 273   531  12   10 Facebook 
10 1/06/2017 48307  72141  221   150 Facebook 
11 1/06/2017 64122  79501  202   106 Facebook 
12 1/06/2017 66810  71033  843   575 Facebook 
13 1/06/2017 46225  50003  138   76 Facebook 
14 1/06/2017 496   1043  16   15 Facebook 

t = df.pivot_table(index="Date", columns="Platform", values=['Clicks', 'Landing_Page'], aggfunc='sum') 
      Clicks Landing_Page 
Platform Facebook  Facebook 
Date        
1/06/2017  1420   922 
30/05/2017  237   158 
31/05/2017  1146   731 

t[('Landing_Page', 'Facebook')].div(t[('Clicks', 'Facebook')]).apply(lambda x: '{:.2%}'.format(x)) 
Date 
1/06/2017  64.90% 
30/05/2017 66.70% 
31/05/2017 63.80% 
dtype: object 
+0

これは機能しました。ありがとうございました! – AdrianC

関連する問題