微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找出熊猫数据框中的错误百分比?

如何解决如何找出熊猫数据框中的错误百分比?

我有样本工作历史数据数据,其中记录了通过系统移动的工作历史。为此,我根据以“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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。