亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算 groupby 結果中大于 0 的列的值

計算 groupby 結果中大于 0 的列的值

狐的傳說 2023-08-08 15:06:57
我有一個 groupby 數組,其中需要按 A 進行分組,然后顯示由 B1 和 B2 分隔的 B 實例的計數,最后顯示 > 0.1 的實例的百分比,因此我這樣做是為了獲得前 2 個:    A   B       C   id                                      118 a1  B1      0119 a1  B1      0120 a1  B1      101.1   121 a1  B1      106.67  122 a1  B2      103.33  237 a1  B2      100 df = pd.DataFrame(df.groupby(    ['A', 'B'])['B'].aggregate('count')).unstack(level=1)我得到了第一部分的正確結果:                   BB                  B1   B2Aa1                  4   2a2                  7   9a3                  9   17a4                  8   8a5                  7   8但是當我需要獲得 > 0 的計數百分比時prcnt_complete = df[['A', 'B', 'C']]prcnt_complete['passed'] = prcnt_complete['C'].apply(lambda x: (float(x) > 1))prcnt_complete = prcnt_complete.groupby(['A', 'B', 'passed']).count()我得到一些毫無意義的奇怪值,有時 True 和 False 之間的總和甚至不相加。我試圖按順序理解我做錯的事情,以便我能夠理解它。我正在尋找的結果是這樣的:                   B         passedB                  B1   B2   B1   B2Aa1                  4   2    2    2a2                  7   9    7    6a3                  9   17   9    5
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

你可以做:


(df['C'].gt(1).groupby([df['A'],df['B']])

    .agg(['size','sum'])

    .rename(columns={'size':'B','sum':'passed'})

    .unstack('B')

)

輸出(來自樣本數據):


       B    passed   

B  B1 B2     B1 B2

A                 

a1  4  2      2  2


查看完整回答
反對 回復 2023-08-08
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

在解決你的問題時,我還想看看是否可以獲得 B 的平均百分比(同時忽略 0)。我在獲得計數的同時也能夠完成此任務。


本練習的數據框:


     A   B       C

0   a1  B1    0.00

1   a1  B1    0.00

2   a1  B1   98.87

3   a1  B1  101.10

4   a1  B2  106.67

5   a1  B2  103.00

6   a2  B1    0.00

7   a2  B1    0.00

8   a2  B1   33.00

9   a2  B1  100.00

10  a2  B2   80.00

11  a3  B1   90.00

12  a3  B2   99.00

排除零的情況下求平均值


為此我必須.replace(0, np.nan)在 groupby 函數之前添加。


A = ['a1','a1','a1','a1','a1','a1','a2','a2','a2','a2','a2','a3','a3']

B = ['B1','B1','B1','B1','B2','B2','B1','B1','B1','B1','B2','B1','B2']

C = [0,0,98.87,101.1,106.67,103,0,0,33,100,80,90,99]

import pandas as pd

import numpy as np

df = pd.DataFrame({'A':A,'B':B,'C':C})


df = pd.DataFrame(df.replace(0, np.nan)

                    .groupby(['A', 'B'])

                    .agg({'B':'size','C':['count','mean']})

                    .rename(columns={'size':'Count','count':'Passed','mean':'Avg Score'})).unstack(level=1)

df.columns = df.columns.droplevel(0)


   Count    Passed    Avg Score         

B     B1 B2     B1 B2        B1       B2

A                                       

a1     4  2      2  2    99.985  104.835

a2     4  1      2  1    66.500   80.000

a3     1  1      1  1    90.000   99.000


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 231 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號