You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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]
})

实现步骤

  1. 透视聚合,拆分状态计数
    先将数据转成宽表格式,让每个位置对应的Enabled和Disabled主机数成为独立列,缺失的状态用0填充:

    pivot_df = df.pivot_table(
        index='Location',
        columns='Status',
        values='Host',
        fill_value=0,
        aggfunc='sum'
    ).reset_index()
    
  2. 按规则计算最终状态
    用嵌套的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'
            )
        )
    )
    
  3. 整理目标格式
    提取需要的列得到最终结果:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:15:12