在Python 3中对列进行分组并提取统计信息

时间:2018-11-14 22:38:00

标签: python python-2.7 pandas dataframe group-by

我正在使用NBA Draft数据框,该数据框可以从here获取并通过熊猫读取。

它是这样的:

              Player  Position   ID         Draft Year Projected SPM Superstar  Starter Role Player Bust
0   Karl-Anthony Towns  C   karl-anthony-towns  2015    1.030606    0.134767    0.427183    0.163083    0.274967
1   Justise Winslow     SF  justise-winslow     2015    0.875329    0.083529    0.510905    0.176767    0.228800
2   Stanley Johnson     SF  stanley-johnson     2015    0.679493    0.067800    0.423733    0.278500    0.229967
3   Jahlil Okafor       C   jahlil-okafor       2015    0.521661    0.058717    0.409900    0.235533    0.295850
4   D`Angelo Russell    PG  d-angelo-russell    2015    0.511967    0.152033    0.342283    0.096583    0.409100

现在我正在尝试按position列分组,并获取每个draft year中的玩家人数。同时,我想显示superstar列的中位数。

到目前为止,这是我的代码:

data['Median'] = data['Superstar'].median()
data[data['Draft Year']>=2015].groupby('Position').count()

但是我认为这并不是在喊我想要的东西。有人可以指出正确的方向吗?

提前谢谢

1 个答案:

答案 0 :(得分:3)

您可以groupby并使用agg

df.groupby(['Position', 'Draft Year']).agg({'Superstar':'median', 'Player':'count'})

                           Superstar    Player
Position    Draft Year      
C            2015           0.096742       2
PG           2015           0.152033       1
SF           2015           0.075664       2

或者您可以创建一个函数

def my_agg(x):
    names = {
        'Superstar Median': x['Superstar'].median(),
        'Player Count': x['Player'].count(),
    }

    return pd.Series(names, index=['Superstar Median', 'Player Count'])

df.groupby(['Position', 'Draft Year']).apply(my_agg)

                        Superstar Median    Player Count
Position    Draft Year      
C             2015          0.096742           2.0
PG            2015          0.152033           1.0
SF            2015          0.075664           2.0