我有一个数据框,如下所示:
首先我想得到CODE
值的总体频率,称之为FREQ
,然后是每个AXLE
组中CODE
值的频率,并称之为GROUP_FREQ
我能够使用以下代码计算FREQ
列:
pivot = df[['AXLES','CODE']].pivot(['CODE']).agg(['count','mean','min','max'])
pivot['FREQ']=grouped_df.AXLES['count']/pivot.AXLES['count'].sum()*100`
这提供了一个很好的分组数据帧,如下所示:
然而,在下一步中,我不知道如何使用这个grouped_by
数据帧计算每个AXLE
组中的频率
我试过:
pivot['GROUPFREQ']=pivot['AXLES','mean']['count']/pivot['AXLES','mean']['count'].sum()*100
然而,这给出了一个KeyError: '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
pivot
数据帧的所需输出:
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。)
你是说:
输出:
相关问题 更多 >
编程相关推荐