2016-09-19 6 views
3

Ich habe einen DatenrahmenPandas Gruppe, Filter & Plot

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 

Und so weiter ...

ich einen Datenrahmen für jede Regel ähnlich wie unten zu bekommen bin der Hoffnung: Z.B. Datenrahmen für rule_name A:

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

Eg Datenrahmen für rule_name B:

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

Etc.

Meine aktuelle Lösung:

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)) 

Wie Sie sehen kann ich bin nicht in der Lage Erhalte den Namen der% -Regel und zeichne nur den count_rule_name. Ich habe das Gefühl, dass es (a) eine Lösung und (b) eine bessere Lösung gibt, die dann durch den Namen und die Plotting der einzelnen Regeln iteriert, aber leider nicht in der Lage ist, es herauszufinden.

Antwort

3

Lösung
Verwenden df.Date.str.split().str[0] erhalten Monate

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

Plot

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

enter image description here

Validate Zählt

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

enter image description here

+0

Dies ist hilfreich - aber ich versuche, es in das gleiche Datenrahmen zu bringen, damit ich sie auf dem gleichen Grundstück Grundstück. I.e. Regelname für die Handlung, jeden Monat eine Zählung und dann auf der rechten y-Achse wäre ein% Plot ... denkst du, dass das möglich ist? – SteelyDanish

+1

@SteelyDanish Ich habe völlig erraten, was du willst. Wenn dies nicht der Fall ist, müssen Sie sich mehr anstrengen, uns zu zeigen, was Sie erwarten. – piRSquared

+0

danke für Kommentar - aktualisiert für Klarheit @piRSquared – SteelyDanish