Python 熊猫-获取最新的';n';分组数据的列值

Python 熊猫-获取最新的';n';分组数据的列值,python,pandas,Python,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 |

我是新熊猫,我有作业调度器程序的以下数据:

| 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]

您是否需要将最后5次运行的确切字符串像那样连接到一个单元格中?还有,你所说的“在一个时间范围内”是什么意思?您的意思是说“在一个区域内”吗?您是否需要将最后5次运行的确切字符串像这样连接到一个单元格中?->不,单独的单元也可以。还有,你所说的“在一个时间范围内”是什么意思?你是说“在一个地区”吗?->我的意思是时间,这些记录几乎是实时更新的,所以,我会像上周或上个月那样在时间范围内运行报告。谢谢!答案需要一些微调(可能我不够清楚!)才能得到最新的5<代码>排序\u值必须采用参数
升序=假
,我们必须使用
头(5)
将结果计数限制为5。如果你能在你的答案中更新这个,那就太好了。再次感谢!哦,谢谢你,我错过了那个!刚刚更新了答案。