python - Pandas - 获取分组数据的最新 'n' 列值

标签 python pandas

我是新 Pandas ,我有以下作业调度程序数据:

| Job Name   | Region        | Status | Timestamp            |
| some_job_1 | some_region_1 | DONE   | 2018-10-02T03:46:25Z |
| some_job_1 | some_region_2 | ERROR  | 2018-10-02T03:44:25Z |
| some_job_2 | some_region_1 | DONE   | 2018-10-01T03:46:25Z |
| some_job_1 | some_region_2 | ERROR  | 2018-11-02T03:44:25Z |

现在,我想要一个时间范围内前 5 个失败的作业,它是最后“n”个执行状态。应该看起来像这样:

| Job Name   | Region        | DONE | ERROR | Last 5 runs                  |
| some_job_1 | some_region_1 | 3    | 12    | ERROR DONE ERROR ERROR ERROR |
| some_job_1 | some_region_2 | 2    | 9     | ERROR DONE ERROR ERROR ERROR |
| some_job_2 | some_region_1 | 2    | 8     | ERROR DONE ERROR ERROR ERROR |
| some_job_2 | some_region_2 | 5    | 7     | ERROR DONE ERROR ERROR ERROR |
| some_job_3 | some_region_2 | 5    | 7     | ERROR DONE ERROR ERROR ERROR |

我已经做到了这一点:

| Job Name   | Region        | DONE | ERROR | 
| some_job_1 | some_region_1 | 3    | 12    | 
| some_job_1 | some_region_2 | 2    | 9     | 
| some_job_2 | some_region_1 | 2    | 8     | 
| some_job_2 | some_region_2 | 5    | 7     | 
| some_job_3 | some_region_2 | 5    | 7     | 

使用:

data.groupby(['Job Name', 'Region']).Status.value_counts().unstack().fillna(0).sort_values('ERROR', ascending=False).head(5)

我尝试使用 last() 但没有成功。如果有人可以帮助我,我将不胜感激!

最佳答案

您可以在单独的 agg 函数中定义聚合并将它们应用于 groupby 对象。

def aggs(data):
    values = dict(data['Status'].value_counts())
    values['Last'] = list(data[['Status', 'Timestamp']].sort_values('Timestamp', ascending=False)['Status'].head(5))
    return pd.Series(values, index=['DONE', 'ERROR', 'Last'])

data.groupby(['Job Name', 'Region']).apply(aggs).fillna(0)

                            DONE    ERROR   Last
Job Name    Region          
some_job_1  some_region_1   1.0     0.0    [DONE]
            some_region_2   0.0     2.0    [ERROR, ERROR]
some_job_2  some_region_1   1.0     0.0    [DONE]

关于python - Pandas - 获取分组数据的最新 'n' 列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53044021/

相关文章:

python - 如何在 pandas 数据框中有效地存储分数列表和按日期分组

python - 如何使用python动态设置excel表的50列值

python - 将 MySQL 与 Python 连接

python - 如何将数据框转换为字典

python - 从 pandas 1.1.5 升级到最新版本

python - 如何叠加 Pandas 图、matplotlib 图和轴

python - 在数据框中创建最大/最小列时选择列的问题

python - 如何从 Python 中的字符串列表中删除 numpy nan?

python - 如何正确使用 ShowWIndow() 和 SetForegroundWindow?

python - 重新索引多索引的一个级别的便捷方法