[英]Pandas Frequency of subcategories in a GroupBy
我有一個 DataFrame 如下圖:
首先,我想獲取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`
這提供了一個很好的分組 DataFrame 如下所示:
但是,我無法弄清楚如何在下一步中使用這個grouped_by
DataFrame 計算每個AXLE
組內的頻率。
我試過了:
pivot['GROUPFREQ']=pivot['AXLES','mean']['count']/pivot['AXLES','mean']['count'].sum()*100
但是,這會產生KeyError: 'count'
。
我可能走錯了路,我想要實現的目標可能無法使用groupby
。 經過幾個小時的反復試驗后,我決定與社區核實。 如果你能告訴我你的想法,我會很高興。
謝謝!
可重現輸入 DataFrame:
,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 DataFrame 所需的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
對於 output 的第一行:001 在整個數據集(20 條記錄)中只出現一次。 因此 FREQ = 1/20 = 0.05 當數據按 AXLES 分組時,對於 AXLES=4 組,001 是唯一的記錄,因此 GROUPFREQ = 1/1 = 1.00。 (不同的AXLE組下不能出現相同的代碼,所以001只需要檢查AXLES=4即可。)
你的意思是:
pivot['FREQ'] = df.groupby('AXLES').CODE.value_counts(normalize=True).reset_index(level=0,drop=True)
Output:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.