[英]A more efficient way to find percentage
使用groupby后從一個數據幀中要確定成功/失敗率。 盡管我對Python和熊貓的了解有限,但我看起來效率低下且笨拙。 必須有一些更簡單有效的方法。 任何幫助將非常感激。
BldgID BldHt Device Date Time Result
1213 35 758 20181120 105550 OK
1213 35 758 20181120 105540 NG
1112 40 780 20181120 003102 OK
1117 26 790 20181120 002557 OK
1111 65 780 20181120 002102 NG
1214 80 758 20181120 001600 OK
2902 34 780 20181119 005410 OK
1232 90 780 20181119 001410 OK
1222 75 760 20181119 010552 OK
1214 80 758 20181119 010052 OK
1214 80 758 20181119 005553 NG
1246 16 790 20181119 004556 OK
1128 15 758 20181119 004552 OK
1128 15 758 20181119 004552 OK
1211 30 790 20181119 003557 NG
1211 30 790 20181119 003558 OK
這是數據幀(csv)。 首先,我想將[BldgID,BldHt,設備]分組,並找到它們在結果中所占的百分比,即OK / OK + NG。 我所做的是,將“確定”更改為“ 1”,將“ NG”更改為“ 0”。 總結所有的“確定”。 為了找到總數(OK + NG),我在更改其值(1和0)之前使用了數據框並計算了總數。 否則,它不會計算NG,然后將其除以找到“確定”的百分比。
df = pd.read_csv("data.csv")
df1 = df.groupby(['BldgID','Device'])['Result'].agg('sum').reset_index()
df1 = df.replace({'OK':1, 'NG': 0})
df1 = df1.groupby(['BldgID','Device'])['Result'].agg('sum').reset_index()
df1['NumOKs'] = df1['Result']
# used the original df i.e. change OK=1, NG=0, to count the total num of
# OK+NG
df2 = df.groupby(['BldgID','Device'])
['Result'].agg('count').reset_index()
df2['sum'] = mel_df2['Result']
df2.drop(['Result'], axis=1, inplace=True)
df3 = pd.concat([df1['NumOKs'], df2['sum']], axis=1, keys=
['NumOKs','sum'])
df3.head(10)
# sum represents OK+NG
NumOKs sum
0 2 2
1 6 6
2 2 2
3 2 2
4 2 2
5 3 4
6 3 3
7 3 3
8 2 3
9 3 3
我得到了想要的東西,但它看起來非常丑陋且效率低下。 但是,由於我的知識有限,我必須快速找到一些可行的方法。 希望以更好,更簡單的方式實現這一目標。 注意:當我剪切粘貼一小段代碼並得出解釋我想要的內容以及如何(非常)如何做到這一點時,結果可能無法完全復制。
IIUC,嘗試使用mean
和布爾條件:
df.groupby(['BldgID', 'Device'])['Result'].apply(lambda x : (x=='OK').mean())
要將其添加到您的數據框中:
df['mean_ok'] = df.groupby(['BldgID', 'Device'])['Result']\
.apply(lambda x : (x=='OK').mean())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.