Как построить многоиндексную матрицу перехода? - PullRequest
0 голосов
/ 06 июня 2018

Я начинаю со следующих табличных данных: (скажем, результаты тестов по версии)

    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 голосов
/ 06 июня 2018

Это одно решение с использованием 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
0 голосов
/ 06 июня 2018

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
...