簡體   English   中英

Pandas 組中子類別的頻率By

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM