Python GroupBy中子类别的频率

Python GroupBy中子类别的频率,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据框,如下所示: 首先,我想得到code值的总体频率,称之为FREQ,然后是每个axe组中code值的频率,并称之为group\u FREQ 我能够使用以下代码计算FREQ列: pivot = df[['AXLES','CODE']].pivot(['CODE']).agg(['count','mean','min','max']) pivot['FREQ']=grouped_df.AXLES['count']/pivot.AXLES['count'].sum()*100` 这提供

我有一个数据框,如下所示:

首先,我想得到
code
值的总体频率,称之为
FREQ
,然后是每个
axe
组中
code
值的频率,并称之为
group\u FREQ

我能够使用以下代码计算
FREQ
列:

pivot = df[['AXLES','CODE']].pivot(['CODE']).agg(['count','mean','min','max'])
pivot['FREQ']=grouped_df.AXLES['count']/pivot.AXLES['count'].sum()*100`
这提供了一个很好的分组数据帧,如下所示:

但是,在下一步中,我不知道如何使用此
分组数据帧计算每个
组内的频率

我试过:

pivot['GROUPFREQ']=pivot['AXLES','mean']['count']/pivot['AXLES','mean']['count'].sum()*100
但是,这会产生一个
键错误:“count”

我可能走错了路,我试图实现的目标可能无法使用
groupby
实现。在花了几个小时的反复试验之后,我决定与社区进行核实。如果你能让我知道你的想法,我会很高兴的

谢谢

编辑: 可再现输入数据帧:

,CODE,AXLES
0,0101,5
1,001,4
2,0110111,8
3,010111,7
4,0100,5
5,0101,5
6,0110111,8
7,00111,6
8,00111,6
9,0110111,8
10,0100,5
11,0110011,8
12,01011,6
13,0110111,8
14,0110111,8
15,011011,7
16,011011,7
17,011011,7
18,01011,6
19,01011,6
CODE,COUNT,AXLES,FREQ,GROUPFREQ
001,1,4,0.05,1.00
00111,2,6,0.1,0.40
0100,2,5,0.1,0.50
0101,2,5,0.1,0.50
01011,3,6,0.15,0.60
010111,1,7,0.05,0.25
0110011,1,8,0.05,0.17
011011,3,7,0.15,0.75
0110111,5,8,0.25,0.83
pivot
数据帧的所需输出:

,CODE,AXLES
0,0101,5
1,001,4
2,0110111,8
3,010111,7
4,0100,5
5,0101,5
6,0110111,8
7,00111,6
8,00111,6
9,0110111,8
10,0100,5
11,0110011,8
12,01011,6
13,0110111,8
14,0110111,8
15,011011,7
16,011011,7
17,011011,7
18,01011,6
19,01011,6
CODE,COUNT,AXLES,FREQ,GROUPFREQ
001,1,4,0.05,1.00
00111,2,6,0.1,0.40
0100,2,5,0.1,0.50
0101,2,5,0.1,0.50
01011,3,6,0.15,0.60
010111,1,7,0.05,0.25
0110011,1,8,0.05,0.17
011011,3,7,0.15,0.75
0110111,5,8,0.25,0.83
对于输出的第一行: 001在整个数据集中仅出现一次(20条记录)。因此,频率=1/20=0.05 当数据按轴分组时,对于轴=4组,001是唯一的记录,因此GROUPFREQ=1/1=1.00。(不同轴组下不能出现相同的代码,因此只需检查轴=4的001。)

您的意思是:

pivot['FREQ'] = df.groupby('AXLES').CODE.value_counts(normalize=True).reset_index(level=0,drop=True)
输出:

       AXLES                   FREQ
       count mean min max          
CODE                               
1          1    4   4   4  1.000000
100        2    5   5   5  0.500000
101        2    5   5   5  0.500000
111        2    6   6   6  0.400000
1011       3    6   6   6  0.600000
10111      1    7   7   7  0.250000
11011      3    7   7   7  0.750000
110011     1    8   8   8  0.166667
110111     5    8   8   8  0.833333

df.code.value_counts()
&
df.groupby(['code','axes']).agg({'axes':'count'})
这给出了整个数据帧的总体频率(我也计算过)。在第二步中,我尝试重新计算代码的频率,这一次是在每个
组中,并在
GROUPFREQ
列下分配这些值。您对样本数据的预期输出是什么?我添加了预期输出。
FREQ
列给出了整个数据集的
code
值的频率。
GROUPFREQ
列给出了每个
axes
组中
code
值的频率。(假设您将输入df切片为
df[df.axes==2]
(2是一个示例),然后计算频率,这需要对
axes
的所有值重复,以填充
GROUPFREQ
列。)例如
code
001
频率值为0.05(20条记录中的1条),但是
GROUPFREQ
值为1.00(1对1记录,其中
axe=4
),我希望这能澄清一些问题
GROUPFREQ
基本上是我们单独查看
组时唯一
code
记录的出现频率,而不是整个组(我们计算为
FREQ
)。@marillion请参阅更新。您需要在
上执行
groupby