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。如果你能在你的答案中更新这个,那就太好了。再次感谢!哦,谢谢你,我错过了那个!刚刚更新了答案。