2017-12-04 1 views
0

Ich habe einen Datenrahmen, der ein unqiue IP enthält, und eine Bewertung des Schweregrads auf einem Scan-Ergebnis-Klassifizierer basierte, wie gezeigt:Wie Grafen von Werten in Pandas zur Rückkehr

enter image description here

Mein Ziel: für jeden einzelnen IP, wie gebe ich eine Zählung für jeden Schweregrad zurück? Das Ziel besteht darin, letztendlich eine Tabelle zu erstellen, in der die einzelnen IPs-Summen für jede Schweregradstufe aufgelistet werden.

enter image description here

Ich weiß schon, wie Treffer für die Summenspalte zu erhalten. Das ist so einfach wie:

df_IP_counts = df['IP'].value_counts() 

or 

df_Severity_counts =df.Severity.value_counts() 

Aber wie jeder einzelne IP-Adressen zählt für KRITISCH zu trennen, HOCH, MITTEL und NIEDRIG gibt mir Probleme im Moment.

Vielen Dank.

+0

Bitte posten Sie die tatsächlichen Daten anstelle eines Bildes. – wwii

Antwort

4

könnten Sie rufen groupby + count -

result = df.groupby(['IP', 'Severity']).Severity.count().unstack() 

die Gesamtzahl zu erhalten, können Sie sum auf den Werten rufen und assign/concat/inplace Zuordnung verwenden, um es an die result Datenrahmen hinzufügen -

result['Total'] = result.values.sum(axis=1) 
+0

Großartig. Jetzt muss ich nur noch sicherstellen, dass die Summensäule im Endergebnis enthalten ist! – TheHolyDarkness

+0

@TheHolyDarkness Sie können 'result.sum()' tun und dieses mit dem ursprünglichen Ergebnis verketten. –

+0

Nein. Das führt zu einem Ergebnis wie [Severity KRITISCH 219,0 HOCH 306,0 LOW 32,0 MÄSSIG 339,0] Das ist die falsche Ausgabe. – TheHolyDarkness

Verwandte Themen