【问题标题】:Creating summary table on groupby dataframe based on condition根据条件在 groupby 数据帧上创建汇总表
【发布时间】:2018-09-30 15:54:11
【问题描述】:

我有一个看起来像的熊猫数据框 df

userid  trip_id segmentid   actual  prediction
  1       13       40          3       3
  1       6        2           1       1
  1       44       3           2       3
  2       70       19          1       1
  2       12       5           0       0

我需要创建一个汇总数据框 dfsummary 按列 userid 分组,包含三列 userid、正确分类和不正确分类。 如果实际值和预测值相同,则分类正确,否则分类错误。

我可以将整个数据帧上的正确分类计算为

correct_classified = submission[(submission['Actual'] == submission['prediction'])]
incorrect_classified = submission[(submission['Actual'] != submission['prediction'])]

但不知道创建按用户 ID 分组的汇总表,应该是这样的

userid  correct_classified  incorrect_classified
  1             2                    1
  2             2                    0

【问题讨论】:

    标签: python pandas dataframe counter


    【解决方案1】:

    创建条件数组后可以使用pd.crosstab

    flags = np.where(df['actual'].eq(df['prediction']), 'correct', 'incorrect')
    
    res = pd.crosstab(df['userid'], flags)
    
    print(res)
    
    col_0   correct  incorrect
    userid                    
    1             2          1
    2             2          0
    

    【讨论】:

    • 这要简单得多。
    【解决方案2】:

    您也可以使用pivot table

    m = df['actual']==df['prediction']
    
    # assign the conditions to new columns and aggregate.  
    df.assign(correct_classified=m,incorrect_classified=~m).pivot_table(index='userid',
                                                                        aggfunc='sum',
                                                                        values=['correct_classified',
                                                                                'incorrect_classified'])
    

    输出:

         correct_classified  incorrect_classified
    userid                                          
    1                      2.0                   1.0
    2                      2.0                   0.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多