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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (113)

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

    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),我想在行和列上都有多索引。

我想不出如何把相同的“结果”栏的两个行和列multiindexes。有什么建议吗?

提问于
用户回答回答于

基本上我们可以用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
用户回答回答于

使用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

扫码关注云+社区

领取腾讯云代金券