2017-04-01 2 views
0

Ich habe einen Datenrahmen, die wie folgt aussieht:Bins für Histogramm

 legal value 
0 1  3 
1 1  7 
2 0  10 
3 1  12 
4 1  4 
5 1  17 
6 0  21 
7 1  19 
8 1  3 
9 0  18 
10 1  17 
11 1  17 
12 0  11 
13 1  23 

und ich versuche, nur die gesetzlichen Werte in 6 sind Intervalle für ein Histogramm zu teilen. Die Intervalle wie folgt aussehen:

[0-6], [6-9], [9-12], [12-16], [16-20], [20-24] 

Die gesammelten Daten dann würde wie folgt aussehen:

bin frequency values 
0-6 3   3, 4, 3 
6-9 1   7 
9-12 1   12 
12-16 1   12 
16-20 4   17, 17, 19, 17 
20-24 1   23 

Ich versuche, ein Histogramm mit den bin Abständen auf der cx-Achse zu erzeugen, und die die Frequenz des gültig Werte auf der y-Achse. Grundsätzlich versucht man ein Histogramm zu erstellen, das so aussieht example.

Bisher hat ich dies geschrieben:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from collections import defaultdict 

bins = ['0-6', '6-9', '9-12', '12-16', '16-20', '20-24'] 
df = pd.read_csv('data.csv', encoding = 'ISO-8859-1') 

d = defaultdict(int) 
for legal, value in zip(df['legal'], df['value']): 
    if (legal == 1): 
     if (0 <= value <= 6): 
      d[bins[0]] += 1 

zur Gruppierung versucht, die Behälter mit Wörterbuch, aber dies scheint über komplizierte und ihr muss ein besserer Weg mit der pandas Bibliothek sein.

Wie kann ich etwas wie pandas.Dataframe.groupby verwenden, um die Bins mit ihren jeweiligen Häufigkeiten zu gruppieren, und dann diese Werte in einem Histogramm unter Verwendung von matplotlib.pyplot?

Antwort

1

Keine Gruppierung erforderlich, der Datenrahmen kann nur durch die Spaltenwerte "legal" gefiltert werden.

import matplotlib.pyplot as plt 
import pandas as pd 

legal= [1,1,0,1,1,1,0,1,1,0,1,1,0,1] 
value = [3,7,10,12,4,17,21,19,3,18,17,17,11,23] 
df = pd.DataFrame({"legal":legal, "value":value}) 

df2 = df[df["legal"] == 1] 

bins = [0,6,9,12,16,20,24] 
plt.hist(df2["value"], bins=bins, edgecolor="k") 
plt.xticks(bins) 

plt.show() 

enter image description here