使用Pandas根据主机状态计数判定位置的Enabled/Disabled状态
解决方法:根据主机状态计数判定位置最终状态
示例源数据
假设你的源DataFrame结构如下:
import pandas as pd df = pd.DataFrame({ 'Location': ['A', 'A', 'B', 'C', 'C', 'D'], 'Status': ['Enabled', 'Disabled', 'Enabled', 'Enabled', 'Disabled', 'Disabled'], 'Host': [5, 3, 4, 2, 2, 6] })
实现步骤
透视聚合,拆分状态计数
先将数据转成宽表格式,让每个位置对应的Enabled和Disabled主机数成为独立列,缺失的状态用0填充:pivot_df = df.pivot_table( index='Location', columns='Status', values='Host', fill_value=0, aggfunc='sum' ).reset_index()按规则计算最终状态
用嵌套的numpy.where直接按规则判断,比apply效率更高:import numpy as np pivot_df['Final_Status'] = np.where( # 规则1:仅存在Enabled状态 pivot_df['Disabled'] == 0, 'Enabled', np.where( # 规则1:仅存在Disabled状态 pivot_df['Enabled'] == 0, 'Disabled', np.where( # 规则2:Enabled数量多于Disabled pivot_df['Enabled'] > pivot_df['Disabled'], 'Enabled', # 规则2(反之)+规则3(数量相等):标记为Disabled 'Disabled' ) ) )整理目标格式
提取需要的列得到最终结果:result_df = pivot_df[['Location', 'Final_Status']]
输出结果
运行后result_df的内容为:
Location Final_Status 0 A Enabled 1 B Enabled 2 C Disabled 3 D Disabled
额外说明
如果源数据中同一Location+Status组合有多行记录,pivot_table的aggfunc='sum'会自动求和,完全匹配需求。
内容的提问来源于stack exchange,提问作者Marcley Moraes
相关产品推荐
相关产品推荐

