2017-10-05 15 views
0

次の結果を持つピボットテーブルを生成しようとしています 私は勝敗の数をどのように計算しているのだろうかと思っています。 本質的に、 「勝利」Python Pivot Table条件付きカウント

私はドロー/ウィン/失われたことにより、速度の内訳を持ってしたくないので、列として検索結果を使いたくなかった...ただ

Name Result  Win Loss Draw Speed 
James 6   2  2  2  50 
Bob  9   7  2  0  48 
Mary  10  5  3  2  70 
の#をカウントする方法があります

これはコードです

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

+1

は正確に、何を "の数を数えますか"? – jrd1

+0

@ jrd1私はWin/Loss/Drawの数をカウントしようとしていますが、Result ColumnにはWin/Loss/Drawのいずれかの文字列がありますので、 "len"を実行すると結果が得られます。 ..しかし、私はウィンの数にフィルタをかけたい....だから私はウィンだけの場合lenを推測する? – Jister

+0

他の言葉では、Result:lenは、各人のプレイゲームの数を教えてくれますが、勝利数を数える方法はありますか?結果は列として返されます。 – Jister

答えて

0

あなたのデータを仮定すると、事前にありがとうございます。このようなものになります。

# 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

を次に単に 'ウィン' とピボットでフィルタ:

# 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'}) 

またはGROUPBY凝集体:

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

同じ結果:

result