[英]How to work out percentage of total with groupby for specific columns in a pandas dataframe?
[英]How to find out error percentage in pandas dataframe?
我有樣本工作歷史數據數據,其中記錄了通過系統移動的工作歷史。 為此,我根據以“1”結尾的錯誤狀態選擇了行。 現在,我試圖從中找到錯誤百分比,但輸出對我來說沒有意義。
從本質上講,我想要做的是,我想至少回答兩次這樣的問題,例如此數據集中有多少部分最終處於錯誤狀態(錯誤狀態是以數字 1 結尾的狀態)。 任何人都可以提出在熊貓中找到錯誤百分比的可能方法嗎? 謝謝
我目前的嘗試
import pandas
url = "https://gist.githubusercontent.com/adamFlyn/35def5060276a88ec5be30fe58f951c2/raw/e12b2b3b4da9988ae6c192e71546db58679d1f6a/work_flow_data.csv"
df = pd.read_csv(url)
err_status = [col for col in df['status'] if col[-1] in '1']
dff = df.loc[df['status'].isin(err_status)]
P = q4_df.groupby('piece_id')['status'].size().reset_index()
P['Percentage'] = 100 * P['status'] / P['status'].sum()
上面的嘗試沒有給我正確的答案,因為我想知道至少兩次處於錯誤狀態的作品的百分比。 我應該如何糾正我的上述嘗試? 任何的想法?
行。 如果我的解釋正確,所有以 1 結尾的status
都是錯誤。 所以,這里有一種方法可以做到這一點。 也許不是最美麗的,但它確實有效。
步驟 1 是創建一個包含status
編號最后一位數字的列:
df['error'] = df['status'].astype(str).str[-1:]
返回
Unnamed: 0 id piece_id status user_id start_time \
0 0 333831567 25395616 10800 911.0 1490989764
1 1 333883698 25390812 10451 88738562.0 1491004450
2 2 331993562 25265523 10450 88738561.0 1490021514
3 3 327905898 24977108 8950 393.0 1487347396
4 4 333065305 25353017 10451 88738560.0 1490647115
.. ... ... ... ... ... ...
197 197 328106609 25008172 8601 169.0 1487625223
198 198 326715370 24855982 21 393.0 1486156797
199 199 330982999 25210529 9000 911.0 1489381774
200 200 327005451 24877265 9000 911.0 1486513127
201 201 334605362 25448390 1220 173935616.0 1491494567
end_time error
0 1.491001e+09 0
1 1.491005e+09 1
2 1.490022e+09 0
3 NaN 0
4 1.490647e+09 1
.. ... ...
197 1.487625e+09 1
198 1.486157e+09 1
199 NaN 0
200 NaN 0
201 1.491495e+09 0
[202 rows x 8 columns]
接下來,按piece_id
並計算錯誤。
df2 = pd.DataFrame(df.groupby(['piece_id'])['error'].count()).reset_index()
df2 = df2.rename(columns={'error':'count errors'})
print(df2)
piece_id count errors
0 23681286 1
1 24037563 1
2 24039587 1
3 24044889 1
4 24065879 1
.. ... ...
141 25395616 1
142 25419247 2
143 25445965 1
144 25447364 1
145 25448390 2
[146 rows x 2 columns]
最后,提取所有大於 1 的錯誤計數(嚴格來說)以獲取所有piece_ids並取百分比:
dff = df2.loc[df2['count errors']>=2]
percentage = len(dff)/len(df)*100
這是13.861386138613863
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.