2016-10-28 4 views
1

Я новичок в библиотеке Pandas и нуждаюсь в некоторой помощи. У меня есть две колонки, как это:Анализ данных с использованием Python Pandas

Test Result  Risk Rating 
    Fail    Low     
    Pass    Medium 
    Skip    High 
    Pass    Low     
    Fail    Medium 
    Pass    High 
    Skip    Low     
    Fail    Medium 
    Fail    High 

Теперь мне нужно найти общий подсчет терпеть неудачу, Прохождения и пропуск из колонки «Результат тестирования», и я могу это сделать. Но мне также нужно получить общее количество столбцов «Сбой» из столбца «Результат теста» с столбцом «Низкий» из столбца «Рейтинг риска». Точно так же общее количество Fail со средой и так далее. Мой конечный результат должен выглядеть так:

Fail (Low Risk Rating) = 1 
Fail (Medium Risk Rating) = 2 
Fail (High Risk Rating) = 1 
Pass (Low Risk Rating) = 1 
Pass (Medium Risk Rating) = 1 
Pass (High Risk Rating) = 1 
Skip (Low Risk Rating) = 1 
Skip (Medium Risk Rating) = 0 
Skip (High Risk Rating) = 1 

Как это сделать? Любая помощь будет оценена по достоинству.

ответ

3

Я думаю, что вам нужно groupby обеими колоннами и совокупным size:

df = df.groupby(['Test Result', 'Risk Rating']).size().reset_index(name='counts') 
print (df) 
    Test Result Risk Rating counts 
0  Fail  High  1 
1  Fail   Low  1 
2  Fail  Medium  2 
3  Pass  High  1 
4  Pass   Low  1 
5  Pass  Medium  1 
6  Skip  High  1 
7  Skip   Low  1 

Может быть лучше, это поворотный стол с unstack:

df = df.groupby(['Test Result', 'Risk Rating']).size().unstack(fill_value=0) 
print (df) 
Risk Rating High Low Medium 
Test Result     
Fail   1 1  2 
Pass   1 1  1 
Skip   1 1  0 

Или slowier решение с crosstab:

df = pd.crosstab(df['Test Result'], df['Risk Rating']) 
print (df) 
Risk Rating High Low Medium 
Test Result     
Fail   1 1  2 
Pass   1 1  1 
Skip   1 1  0 

Если нужно mi Значения ssing с 0 добавить stack:..

df = df.groupby(['Test Result', 'Risk Rating']) 
     .size() 
     .unstack(fill_value=0) 
     .stack() 
     .reset_index(name='counts') 
print (df) 
    Test Result Risk Rating counts 
0  Fail  High  1 
1  Fail   Low  1 
2  Fail  Medium  2 
3  Pass  High  1 
4  Pass   Low  1 
5  Pass  Medium  1 
6  Skip  High  1 
7  Skip   Low  1 
8  Skip  Medium  0 
+0

thanks..I я с помощью DF = df.groupby ([ 'Test Result', 'Оценка риска']) размер() поместить значение (fill_value = 0), но не способный получить конкретные значения из результата df. Напр. Мне просто нужны значения «FAIL» с значениями «HIGH», «LOW», «MEDIUM». –

+0

Я думаю, вам нужно ['boolean indexing'] (http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing) – jezrael

Смежные вопросы