簡體   English   中英

計算 Pandas groupby 中的頻率

[英]Count frequency in Pandas groupby

我有一個看起來像這樣的數據框:

     a     b     c        result
0    80    50    10000    pass
1    80    50    10000    pass
2    100   50    10000    pass
3    100   50    10000    fail
...
XX   110   70    15000    pass
XX   110   70    15000    pass
XX   110   80    10000    fail
XX   110   80    10000    fail

我想獲得數據幀的每個組合(a、b、c)的“通過”頻率(以 % 為單位)。 例如上面的數據集應該導致

     a     b     c        passFreq
0    80    50    10000    1.0
1    100   50    10000    0.5
...
2    110   70    15000    1.0
3    110   80    10000    0.0  

如果我做

df.groupby(['a', 'b', 'c']).describe()

我得到了頻率,但它沒有按照我想要的方式報告它,我不確定如何檢索頻率並從中創建一個新的數據集。

任何指導?

如果需要列result所有值的百分比,請使用crosstab

print (pd.crosstab([df['a'], df['b'], df['c']], df['result'], normalize=0))
result        fail  pass
a   b  c                
80  50 10000   0.0   1.0
100 50 10000   0.5   0.5
110 70 15000   0.0   1.0
    80 10000   1.0   0.0

df2 = (pd.crosstab([df['a'], df['b'], df['c']], 
                  df['result'], normalize=0)
        .reset_index()
        .rename_axis(None, axis=1))
print (df2)
     a   b      c  fail  pass
0   80  50  10000   0.0   1.0
1  100  50  10000   0.5   0.5
2  110  70  15000   0.0   1.0
3  110  80  10000   1.0   0.0

如果只需要首先將比較值pass給新列,然后聚合mean

df1 = (df.assign(new = df['result'].eq('pass'))
         .groupby(['a', 'b', 'c'])['new']
         .mean()
         .reset_index(name='pass'))
print (df1)
     a   b      c  pass
0   80  50  10000   1.0
1  100  50  10000   0.5
2  110  70  15000   1.0
3  110  80  10000   0.0
df.groupby(['a', 'b', 'c'])['result'].mean()

您需要選擇列pass ,然后應用.reset_index(drop=True) .mean().reset_index(drop=True)來重置索引:

df.groupby(['a', 'b', 'c'])['result'].mean().reset_index(drop=True)

如果你需要.describe你也可以這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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