透视对象之后的筛选摘要和详细信息



我保证我用谷歌搜索过 - 我想我从一开始就采取了错误的方法,所以......

假设我有一个包含许多parts的数据帧,这些经历了几次checks,并将在几个orders内交付。

我很难找到一种方法来列出所有零件的订单,其中 100% 或超过 50% 的检查已通过......

我的意思是:

import pandas as  pd
df = pd.DataFrame({
'order' : ['order_A',   'order_A',  'order_A',  'order_A',  'order_B',  'order_B',  'order_B' ],
'part'  : ['part_1',    'part_1',   'part_2',   'part_2',   'Part_3',   'Part_3',   'Part_3', ],
'check' : ['passed',    'passed',   'failed',   'failed',   'failed',   'failed',   'passed'    ],   
})
pivot = pd.pivot_table(
data = df, 
index = ['part'], 
columns = ['check'], 
aggfunc = 'count',
fill_value = pd.NA ,
margins = True)
percent_pivot = pivot.div( pivot.iloc[:,-1], axis=0 )

这里的原始数据非常基本,有很多顺序,很多部分是实际的数据集:

order    part   check
0  order_A  part_1  passed
1  order_A  part_1  passed
2  order_A  part_2  failed
3  order_A  part_2  failed
4  order_B  Part_3  failed
5  order_B  Part_3  failed
6  order_B  Part_3  passed

列表数据透视表,我认为距离我正在寻找的需求只有一半,是:

order               
check     failed    passed  All
part                           
Part_3  0.666667  0.333333  1.0
part_1      <NA>         1  1.0
part_2         1      <NA>  1.0
All     0.571429  0.428571  1.0

如何取回 pass = 1 的parts列表? (part_1这里,因为所有测试都通过了) ?

我怎样才能找回通过> 50%的parts列表?(part_3这里)

拉伸目标:获得零件的order...

我想我失败的根本原因是我没有设法过滤数据透视表,就好像它是"常规"数据帧一样(我想无法掌握多索引,不是吗?

你试试:

pivot.div(pivot[('order','All')], axis=0)

输出:

order               
check     failed    passed  All
part                           
Part_3  0.666667  0.333333  1.0
part_1      <NA>         1  1.0
part_2         1      <NA>  1.0
All     0.571429  0.428571  1.0

要获取超过 100% 的所有部件的列表,请执行以下操作:

percent_pivot.index[np.where(percent_pivot[('order','passed')] == 1)].tolist()

输出:

['part_1']

在斯科特的回答之上,在你得到他的输出pivot后,你可以调用

pivot[pivot['order','passed']==1].index

获取具有passed==1partsaka 索引。输出:

Index(['part_1'], dtype='object', name='part')

您可以根据计算方式对百分比执行类似操作,但您应该修改布尔值以使用np.isclose来覆盖浮点错误(请参阅此处的 python 浮点错误)。例如:

pivot[
np.isclose(pivot['order','passed'].fillna(0),1/3)
].index

输出:

Index(['Part_3'], dtype='object', name='part')

最新更新