我从以下表格数据开始:(假设按版本测试结果)
Item Result Version 0 TO OK V1 1 T1 NOK V1 2 T2 OK V1 3 T3 NOK V1 4 TO OK V2 5 T1 OK V2 6 T2 NOK V2 7 T3 NOK V2
df=p.DataFrame({'Item': ['TO','T1','T2','T3','TO','T1','T2','T3'],
'Version': ['V1','V1','V1','V1','V2','V2','V2','V2'],
'Result' : ['OK','NOK','OK','NOK','OK','OK','NOK','NOK']})
我尝试构建以下报告:
V2 OK NOK V1 OK T0 T2 NOK T1 T3
(上面T0
应该是一个python set ,这是由set
函数聚合产生的),我想在行和列上都有多索引。
我无法想出如何在两个行和列多索引中添加相同的“结果”列。有线索吗?
答案 0 :(得分:1)
IIUC,基本上我们可以使用pivot
df['New']=list(zip(df.Version,df.Result))
s=df.groupby('Item').New.apply(list).apply(pd.Series).reset_index().pivot(0,1,'Item')
s
Out[502]:
1 (V2, NOK) (V2, OK)
0
(V1, NOK) T3 T1
(V1, OK) T2 TO
s.index=pd.MultiIndex.from_tuples(s.index)
s.columns=pd.MultiIndex.from_tuples(s.columns)
s
Out[507]:
V2
NOK OK
V1 NOK T3 T1
OK T2 TO
答案 1 :(得分:1)
这是一个使用pd.pivot_table
的解决方案:
g = df.groupby('Item')['Result'].apply(list).reset_index()
g[['V1', 'V2']] = g['Result'].apply(pd.Series)
res = g.pivot_table(index='V1', columns='V2', values='Item', aggfunc='first')
print(res)
V2 NOK OK
V1
NOK T3 T1
OK T2 TO