如何用Python Pandas创建带MTTR均值、中位数的Top5分组透视表?
嗨,我来帮你搞定这个Pandas透视表的需求!针对你说的海量数据,我们得用高效的步骤来处理,避免冗余计算,一步步来:
步骤1:筛选每个客户下频次Top5的AlertKey
直接在原始大表上操作会很慢,所以先做聚合统计再筛选是更高效的方式:
import pandas as pd # 第一步:统计每个(customer, alertkey)组合的出现频次 alert_freq = df.groupby(['customer', 'alertkey']).size().reset_index(name='occurrence_count') # 第二步:对每个customer,筛选出occurrence_count排名前5的alertkey top5_per_customer = alert_freq.groupby('customer').apply( lambda group: group.nlargest(5, 'occurrence_count') ).reset_index(drop=True) # 第三步:把筛选结果和原始表关联,只保留符合条件的行(减少后续计算的数据量) filtered_df = df.merge(top5_per_customer[['customer', 'alertkey']], on=['customer', 'alertkey'])
步骤2:生成包含均值和中位数的透视表
有了筛选后的数据集,我们就可以用pivot_table生成需要的统计结果:
# 创建透视表,按customer和alertkey分组,计算mttr的均值和中位数 result_pivot = filtered_df.pivot_table( index=['customer', 'alertkey'], values='mttr', aggfunc=['mean', 'median'] ).reset_index() # 重命名列名,让结果更易读 result_pivot.columns = ['customer', 'alertkey', 'mttr_average', 'mttr_median'] # 查看最终结果 print(result_pivot.head())
额外优化建议(针对超大规模数据)
如果数据量已经大到单进程Pandas处理吃力:
- 可以用
dask.dataframe替代,它支持并行分块计算,语法和Pandas几乎一致 - 第一步的频次统计
df.groupby(['customer', 'alertkey']).size()已经是高效操作,尽量避免在原始大表上用transform生成额外列,减少内存占用
内容的提问来源于stack exchange,提问作者Anirban Banerjee
相关产品推荐
相关产品推荐

