【问题标题】:pandas group by on column values and extract one column text熊猫按列值分组并提取一列文本
【发布时间】:2021-11-18 12:35:37
【问题描述】:

我有结果、学生、版本和状态列。在这个我想通过使用 Student , Version 和 result = pass count 和 result = fail count 来分组

类似于 df.groupby(["student", "version", "result=pass"]).size().reset_index(name="new_result")

下面是我的数据框

result student version status Failed Subject
pass Student-A L-1.0 Active
fail Student-A L-1.0 Active Mathematics
fail Student-A L-1.0 Active Physics
pass Student-A M-1.0 Active
fail Student-A M-1.0 Active Science
pass Student-B N-1.0 Active
pass Student-B N-1.0 Active
pass Student-B N-1.0 Active
pass Student-C O-1.0 Active
pass Student-C O-1.0 Active
fail Student-C O-1.0 Active English
fail Student-C P-1.0 Active Computers
fail Student-C P-1.0 Active Mathematics

我希望我的输出数据框如下:

student version pass_count fail_count status total_count (pass+fail) Failed Subject
Student-A L-1.0 1 2 Active 3 Mathematics,Physics
Student-A M-1.0 1 1 Active 2 Science
Student-B N-1.0 3 0 Active 3
Student-C O-1.0 1 1 Active 2 English
Student-C P-1.0 0 2 Active 2 Computers,Mathematics

我可以使用以下但不是总计数来获得通过和失败计数,请任何人帮助

pd.pivot_table(master_df, index=['status', 'student', 'version'], columns=['result'], aggfunc=len, fill_value=0)

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    你可以使用.groupby() + agg(),如下:

    df_out = (df.groupby(['student', 'version', 'status'], as_index=False)
                .agg(**{'pass_count': ('result', lambda x: x[x == 'pass'].size),
                        'fail_count': ('result', lambda x: x[x == 'fail'].size),                    
                        'total_count': ('result', 'size'),
                        'Failed Subject': ('Failed Subject', lambda x: ','.join(x.dropna()))
                        })
              )
    

    结果:

    print(df_out)
    
         student version  status  pass_count  fail_count  total_count         Failed Subject
    0  Student-A   L-1.0  Active           1           2            3    Mathematics,Physics
    1  Student-A   M-1.0  Active           1           1            2                Science
    2  Student-B   N-1.0  Active           3           0            3                       
    3  Student-C   O-1.0  Active           2           1            3                English
    4  Student-C   P-1.0  Active           0           2            2  Computers,Mathematics
    

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2016-07-07
      • 2019-09-20
      • 2017-12-19
      • 2022-10-15
      相关资源
      最近更新 更多