2017-04-01 3 views
0

에 대한 I는 다음과 같습니다 데이터 프레임이 있습니다함은 히스토그램

 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 

을 나는 히스토그램 6 개 빈 간격으로 만 법적 1 값을 분할하기 위해 노력하고있어.

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

데이터는 다음과 같을 것이다 수집 : 간격은 같이 나는 CX 축에 빈 간격 히스토그램을 만들려고하고,의 주파수입니다

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 

유효한 값이 y 축에 있습니다. 기본적으로이 example과 같은 막대 그래프를 만들려고합니다.

지금까지 나는이 작성했습니다 :

그룹에 사전에 쓰레기통을 시도
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 

, 그러나 이것은 복잡한 동안 보인다과 pandas 라이브러리를 사용하여 더 나은 방법들이 있어야합니다.

pandas.Dataframe.groupby과 같은 것을 사용하여 빈을 각각의 빈도로 그룹화 한 다음 matplotlib.pyplot을 사용하여 막대 그래프에이 값을 플로팅 할 수 있습니까?

답변

1

그룹화 할 필요가 없으며 데이터 프레임을 "합법적 인"열 값으로 필터링 할 수 있습니다.

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