【问题标题】:Pandas pivot table value countsPandas 数据透视表值计数
【发布时间】:2020-05-02 09:10:09
【问题描述】:

我有一个格式为:

 Name     Score    Bin
 John     90       80-100
 Marc     30       20-40
 John     10       0-20
 David    20       0-20

...

我想创建一个如下所示的数据透视表:

Name    0-20    20-40    40-60    60-80    80-100   Total count   Avg score
John     1       2        nan      nan      2            5         60.53
Marc    nan      2        nan      nan     nan           2         32.13
David   3        2        nan      nan     nan           5         21.80

所以我想要有显示每个桶的值计数的列,以及值的总计数和平均分数。

我试过了

table = pd.pivot_table(df, values=['Score', "Bin"], index=["nAME"],
                   aggfunc={"Score" : np.average, "Bin" : "count"},
                    dropna=True, margins = True)

但是我只是得到总体计数,而不是按桶细分

【问题讨论】:

  • df.groupby('Name')['Bin'].value_counts().unstack('Bin')

标签: pandas pivot pivot-table


【解决方案1】:

分三步完成你的任务:

  1. 生成一个数据透视表:

    df2 = pd.pivot_table(df, index='Name', columns='Bin', values='Score', aggfunc='count')\
        .reindex(columns=['0-20', '20-40', '40-60', '60-80', '80-100'])\
        .rename_axis(columns='')
    

    结果,为您的源数据扩展以大致给出您的预期 结果,是:

           0-20  20-40  40-60  60-80  80-100
    Name                                    
    David   3.0    2.0    NaN    NaN     NaN
    John    1.0    2.0    NaN    NaN     2.0
    Marc    NaN    2.0    NaN    NaN     NaN
    

    注意:由于 NaNfloat 的特例,其他值也是 浮动类型。

  2. 生成 Total_countAvg_score

    df3 = df.groupby('Name')\
        .agg(Total_count=('Score', 'count'), Avg_score=('Score', 'mean'))\
        .rename(columns={'Total_count': 'Total count', 'Avg_score': 'Avg score'})
    

    结果是:

           Total count  Avg score
    Name                         
    David            5       21.8
    John             5       61.0
    Marc             2       32.0
    
  3. 加入以上两个表格:

    result = df2.join(df3)
    

    结果是:

           0-20  20-40  40-60  60-80  80-100  Total count  Avg score
    Name                                                            
    David   3.0    2.0    NaN    NaN     NaN            5       21.8
    John    1.0    2.0    NaN    NaN     2.0            5       61.0
    Marc    NaN    2.0    NaN    NaN     NaN            2       32.0
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-03-12
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多