Python Pivot表条件计数

时间:2017-10-05 03:54:44

标签: python pandas pivot-table

我正在尝试生成一个包含以下结果的数据透视表 想知道我如何计算胜利,失败和抽奖的数量.... 基本上,我想说只有在结果=='胜利'

时才算数

我不想将结果列为专栏,因为我不想通过Win / Lost / Draw进行速度分解......有没有办法计算#of

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 个答案:

答案 0 :(得分: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

然后过滤' Win'和枢轴:

# 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和aggregate:

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

结果相同:

result