2017-10-05 2 views
0

Ich versuche, eine Pivot-Tabelle mit folgendem Ergebnis zu erzeugen, frage mich, wie ich die # von gewinnen, verloren, und zeichnen .... im Wesentlichen möchte ich sagen, nur zählen, wenn Ergebnis == ‚Gewinn‘Python Pivot Tabelle bedingte Anzahl

ich nicht das Ergebnis als Spalte verwenden wollte, weil ich nicht will Geschwindigkeit Aufschlüsselung nach Win/verloren haben/Draw ... gibt es eine Möglichkeit, nur # von

zu zählen
Name Result  Win Loss Draw Speed 
James 6   2  2  2  50 
Bob  9   7  2  0  48 
Mary  10  5  3  2  70 

Dies ist der Code

report = pd.pivot_table(df,index=["Name"], values=["Result", "Speed"], aggfunc= {"Result": len, "Speed": np.mean}, fill_value=0) 

Vielen Dank im Voraus

+1

"Zähle die Anzahl der" was genau? – jrd1

+0

@ jrd1 Ich versuche die Anzahl der Gewinn/Verlust/Draw zu zählen, in der Ergebnisspalte, es ist eine Zeichenkette von entweder Gewinn/Verlust/Draw .... also wenn ich "len" mache, bekomme ich die Anzahl der Ergebnisse. ..aber ich möchte nach Anzahl der Gewinne filtern .... also schätze ich len nur wenn gewinnt? – Jister

+0

@ jrd1 in anderen Worten, während Ergebnis: len gibt mir, wie viele Spiele jede Person spielt, gibt es eine Möglichkeit für mich, # der Gewinne zu zählen .... ohne Ergebnis als Spalte – Jister

Antwort

0

Ihre Daten sieht wie folgt aus etwas Unter der Annahme:

# sample data 
df = pd.DataFrame({ 
    'Name' : ['James']*6 +\ 
      ['Bob']*9 +\ 
      ['Mary']*10, 
    'Result' : ['Win']*2 + ['Loss']*2 + ['Draw']*2 +\ 
       ['Win']*7 + ['Loss']*2 +\ 
       ['Win']*5 + ['Loss']*3 + ['Draw']*2, 
    'Speed' : [50]*6 +\ 
       [48]*9 +\ 
       [70]*10 
}) 

df

Dann einfach filtern auf 'Gewinn' und Pivot:

# Filter on 'Win'; make pivot table 
df[df.Result == 'Win'].pivot_table(index = 'Name', 
            values = ['Result', 'Speed'], 
            aggfunc = {'Result' : 'count', 
               'Speed' : 'mean'}, 
            fill_value = 0).rename(columns = {'Result' : 'Win'}) 

Oder groupby und Aggregat:

# groupby.agg() 
df[df.Result == 'Win'].groupby('Name').agg({'Result' : 'count', 
              'Speed' : 'mean'}).rename({'Result' : 'Win'}) 

Gleiche Ergebnisse:

result