2016-09-19 7 views
3

에 의해 내가 아래에 유사한 각 규칙에 대한 dataframe을 얻을 수 있었으면하고팬더 그룹, 필터 및 플롯

Date   rule_name 
Jan 1 2016 A 
Feb 4 2016 B 
Jun 6 2016 C 
Feb 5 2016 B 
Feb 9 2016 D 
Jun 5 2016 A 

등등 ...

dataframe 있습니다 일예 RULE_NAME A에 대한 Dataframe : RULE_NAME B에 대한

date  counts (rule_name) %_rule_name 
Jan 16  1     100 
Feb 16  0     0 
Jun 16  1     50 

예 Dataframe :

date  counts (rule_name) %_rule_name 
Jan 16  0     0 
Feb 16  2     66.6 
Jun 16  0     0 

내 현재 솔루션 : 당신이 볼 수 있듯이

rule_names = df['rule_name'].unique().tolist() 
for i in rule_names: 
    df_temp = df[df['rule_name'] == i] 
    df_temp = df.groupby(df['date'].map(lambda x: str(x.year) + '-' + str(x.strftime('%m')))).count() 
    df_temp.plot(kind='line', title = 'Rule Name: ' + str(i)) 

내가 드릴 수 없습니다 규칙 이름의 %를 가져오고 count_rule_name 만 플로팅하십시오. 나는 (a) 해결책이 있고 (b) 더 좋은 해결책이있는 것처럼 느껴진다. 그리고 각 규칙 이름을 반복하고 불행하게도 그것을 알아 내지 못한다.

답변

3

솔루션
사용 df.Date.str.split().str[0] 얻을 개월

df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \ 
    .unstack(fill_value=0).mul(100).round(1) 

enter image description here

플롯

df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \ 
    .unstack(fill_value=0).mul(100).round(1).plot.bar() 
하지만 난 내가 같은 플롯을 플롯 할 수 있습니다 같은 dataframe에 그것을 가지고하려고 - 0

enter image description here

유효성 검사

df.groupby([df.Date.str.split().str[0], df.rule_name]).size().unstack(fill_value=0) 

enter image description here

+0

이 도움이됩니다를 계산합니다. 나는. 줄거리에 대한 규칙 이름, 매월 카운트 한 다음 오른쪽 y 축에 % 음모가 될 것입니다 .... 그것이 가능하다고 생각합니까? – SteelyDanish

+1

@SteelyDanish 나는 당신이 원하는 것을 완전히 추측하고있었습니다. 이것이 아니라면, 우리가 기대하는 것을 보여주기 위해 더 많은 노력을 기울여야 할 것입니다. – piRSquared

+0

해설 해 주셔서 감사합니다 - 명확성을 위해 업데이트 됨 @piRSquared – SteelyDanish