如何在获取PID占比Top5时同步关联Process_name字段?
实现PID占比Top5并关联Process_name的最优方法
方法一:先建立PID-Process_name映射再合并统计结果
这种方法效率较高,适合数据集较大的场景,核心是先提取PID与对应Process_name的唯一关联关系,再和占比统计结果合并:
# 提取PID与Process_name的唯一映射(默认一个PID对应唯一Process_name) pid_process_map = clean_CSV.drop_duplicates(subset='PID')[['PID', 'Process_name']].set_index('PID') # 统计PID的占比并取Top5 pid_ratio = clean_CSV['PID'].value_counts(normalize=True).nlargest(5).mul(100).round(1).astype(str) + '%' # 合并得到包含Process_name的最终结果 PIDdf = pid_ratio.to_frame(name='占比').join(pid_process_map)
方法二:直接分组统计一步到位
如果需要更直观的流程,可以直接按PID和Process_name分组,计算每组的占比后取Top5:
# 按PID和Process_name分组,计算每组的记录数 grouped_data = clean_CSV.groupby(['PID', 'Process_name']).size().reset_index(name='记录数') # 计算每组占总数据的比例 total_records = len(clean_CSV) grouped_data['占比'] = (grouped_data['记录数'] / total_records).mul(100).round(1).astype(str) + '%' # 按占比降序排序,取Top5结果 PIDdf = grouped_data.sort_values(by='占比', ascending=False).head(5)[['PID', 'Process_name', '占比']]
异常情况处理
若数据中存在同一PID对应多个Process_name的异常情况,可先对每个PID保留出现次数最多的Process_name:
# 对每个PID,保留出现次数最多的Process_name pid_process_map = clean_CSV.groupby('PID')['Process_name'].agg(lambda x: x.value_counts().index[0]).to_frame()
内容的提问来源于stack exchange,提问作者Zarif Rahman
相关产品推荐
相关产品推荐

