Pandas 熊猫从类别总和中创建百分比
我有一个网站流量数据集,在一个月的时间内,大约有2000个网站,按流量来源的设备类型列出:Pandas 熊猫从类别总和中创建百分比,pandas,multi-index,pandas-groupby,Pandas,Multi Index,Pandas Groupby,我有一个网站流量数据集,在一个月的时间内,大约有2000个网站,按流量来源的设备类型列出: In [12]: df.sample(10) Out[12]: date device nb_uniq_visitors site_id 11 2017-10-31 Tv 0.0 3331.0 6 2017-10-22 Car browser
In [12]: df.sample(10)
Out[12]:
date device nb_uniq_visitors site_id
11 2017-10-31 Tv 0.0 3331.0
6 2017-10-22 Car browser 0.0 503.0
7 2017-10-22 Camera 0.0 3259.0
7 2017-10-08 Car browser 0.0 630.0
3 2017-10-23 Camera 0.0 118.0
0 2017-10-12 Desktop 1.0 4769.0
11 2017-10-31 Tv 0.0 361.0
5 2017-10-12 Phablet 0.0 2999.0
9 2017-10-17 Portable media player 0.0 1725.0
0 2017-10-13 Desktop 2410.0 1004.0
4 2017-10-13 all 900.0 1271.0
请注意,device
列的all
类别表示所有设备的总数,因此它可以作为百分比计算的分母
我想看看每个网站的设备类型的百分比,我想象输出是这样的(我手动计算了以下示例):
我使用groupby
对site\u id
和device
进行分组:
In [23]: sl = df.groupby(['site_id', 'device']).sum()
In [24]: sl.head(25)
Out[24]:
nb_uniq_visitors
site_id device
74.0 Camera 0.0
Car browser 0.0
Console 1.0
Desktop 10534.0
Feature phone 0.0
Phablet 178.0
Portable media player 4.0
Smart display 0.0
Smartphone 6955.0
Tablet 1022.0
Tv 1.0
Unknown 62.0
all 18757.0
96.0 Camera 0.0
Car browser 2.0
Console 6.0
Desktop 118157.0
Feature phone 0.0
Phablet 1061.0
Portable media player 73.0
Smart display 0.0
Smartphone 53292.0
Tablet 11060.0
Tv 2.0
Unknown 1717.0
all 185370.0
如何将上述值从聚合值转换为百分比?还是有更好的办法 用于选择所有
行并除以:
详情:
print (sl.xs('all', level=1))
nb_uniq_visitors
site_id
74.0 18757.0
96.0 185370.0
逻辑如下:1。获取
nb\u uniq\u访客的总数
2。在列nb\u uniq\u visitors
处的数据帧的每行上应用lambda除以总数。例如,df['nb_uniq_visitors']=df['nb_uniq_visitors'].apply(lambda row:row/sum(df['nb_uniq_visitors'])
我在[24]:sl.head(25)中使用输出形式,这是唯一的方法;)@Wen输入数据中包含了所有的数据。@JosephDasenBlock那么为什么您的样本数据没有包含这些数据?@Wen我只是显示了输入数据的样本,它恰好没有包含所有的类别。你说得对axis=0
是默认值,因此应该忽略
sl = df.groupby(['site_id', 'device']).sum()
a = sl.div(sl.xs('all', level=1))
print (a)
nb_uniq_visitors
site_id device
74.0 Camera 0.000000
Car browser 0.000000
Console 0.000053
Desktop 0.561604
Feature phone 0.000000
Phablet 0.009490
Portable media player 0.000213
Smart display 0.000000
Smartphone 0.370795
Tablet 0.054486
Tv 0.000053
Unknown 0.003305
all 1.000000
96.0 Camera 0.000000
Car browser 0.000011
Console 0.000032
Desktop 0.637412
Feature phone 0.000000
Phablet 0.005724
Portable media player 0.000394
Smart display 0.000000
Smartphone 0.287490
Tablet 0.059664
Tv 0.000011
Unknown 0.009263
all 1.000000
print (sl.xs('all', level=1))
nb_uniq_visitors
site_id
74.0 18757.0
96.0 185370.0