我目前正在使用比率,但遇到了障碍。
以下是我使用[还有Instagram,Messenger等其他平台]的数据的一小部分示例,以提供以下更多背景信息:
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)
当我在excel中透视这个(并创建一个计算列)时,我得到了
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%
当我在Pandas中进行Pivot或Groupby时,我得到:
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%
我猜测Pandas正在平均当天的行值,因为excel会创建一个总数,并以总条目(如果有意义)潜水。
简而言之,我的问题是:
非常感谢任何帮助。
答案 0 :(得分:1)
此处您正确识别的问题是,您无意中平均每日点击登陆值,而Excel则通过总结每日点击次数和目标网页访问量以及划分值来计算平均值
您可以在pandas
中通过创建pivot_table
并对每天的值进行求和来做同样的事情(通知我已经aggfunc='sum'
传递给pivot_table
)。然后,您可以应用除法来查找平均值:
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