python - 具有均值和计数的条件分组

标签 python pandas

我想详细阐述一下分组逻辑如下。给定数据框 df:

df =

    ID  GROUP  DAY  GRADE  TIME_1
    1   AAA    1    5      20
    1   AAA    1    4      19
    1   AAA    1    3      21
    1   BBB    2    1      10
    2   BBB    2    3      13

我需要按IDGRADEGROUPDAY 对行进行分组,并计算平均值TIME_1,一组中的行数。另外(这是我的问题),我想检查 GRADE 是 4 还是 5,那么它应该被分组为正成绩并且平均 TIME_1 应该根据它,否则 - 为负数。

结果应该是这样的:

result =

    GROUP  DAY  AVG_TIME_1_POSITIVE  AVG_TIME_1_NEGATIVE  QTY_POSITIVE   QTY_NEGATIVE
    AAA    1    19.5                 21                   2              1
    BBB    2    0                    11.5                 0              2

我用的是这种方式,但是不知道如何通过GRADE指定分组条件:

result = df.groupby(['GROUP','GRADE','DAY']).agg({'TIME_1': 'mean', 
                     'ID': 'count'}).reset_index()

最佳答案

一个可能的解决方案是 boolean indexing然后使用 concat :

mask = df.GRADE.isin([4,5])
result1 = df[mask].groupby(['GROUP','DAY']).agg({'TIME_1': 'mean', 
                     'ID': 'count'}).add_suffix('_POSITIVE')

print (result1)
           TIME_1_POSITIVE  ID_POSITIVE
GROUP DAY                              
AAA   1               19.5            2

result2 = df[~mask].groupby(['GROUP','DAY']).agg({'TIME_1': 'mean', 
                     'ID': 'count'}).add_suffix('_NEGATIVE')

print (result2)
           TIME_1_NEGATIVE  ID_NEGATIVE
GROUP DAY                              
AAA   1               21.0            1
BBB   2               11.5            2

print (pd.concat([result1, result2], axis=1))
           TIME_1_POSITIVE  ID_POSITIVE  TIME_1_NEGATIVE  ID_NEGATIVE
GROUP DAY                                                            
AAA   1               19.5          2.0             21.0            1
BBB   2                NaN          NaN             11.5            2

关于python - 具有均值和计数的条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41484231/

相关文章:

python - 如何补全数据框中缺失的数据

pandas - Shapefile 缩放以使用 geopandas 绘图

python - 如何仅对 pandas 中的一组中的某些行进行排序?

python - 如何像 R 一样将变量从 Python 脚本导入到交互式 shell 中?

python - Python中sklearn的线性回归中,莫名其妙的维度不匹配错误

Python CGI 将正确的文本返回给curl,但浏览器显示尾随零

python - 使用 pd.read_csv 自动检测 CSV 文件中的分隔符

python - 结果的矩阵形式表示

python - 添加点击QLineEdit

python - 在 Odoo ORM 中处理 SQL 约束异常