如何解决如何找出熊猫数据框中的错误百分比?
我有样本工作历史数据数据,其中记录了通过系统移动的工作历史。为此,我根据以“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] 举报,一经查实,本站将立刻删除。