如何构建多索引转换矩阵?

时间:2018-06-05 21:41:46

标签: python pandas pivot-table multi-index

我从以下表格数据开始:(假设按版本测试结果)

    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函数聚合产生的),我想在行和列上都有多索引。

我无法想出如何在两个行和列多索引中添加相同的“结果”列。有线索吗?

2 个答案:

答案 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