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

如何用Python Pandas生成资产整体Pass/Fail性能列?

问题:基于Pandas生成资产的整体性能列

我有两列数据:A列是可重复的资产编号,B列是单个实例的pass/fail结果。需要使用Pandas创建overall performance列,规则为:

  • 若某资产存在任意一次fail,则该资产所有行的整体性能均为fail
  • 若资产所有实例均为pass,则整体性能为pass

输入数据

Assetperformance
1pass
1fail
2pass
3fail
3fail
4pass

期望输出

Assetperformanceoverall performance
1passfail
1failfail
2passpass
3failfail
3failfail
4passpass

是否可以通过Python实现该需求,为每个资产的所有行生成对应的整体性能结果?


解决方案

完全可以实现,这里提供两种简洁的Pandas实现方式:

方法1:分组后映射(直观易懂)

import pandas as pd

# 构造输入数据(实际使用时可替换为读取你的数据源)
data = {
    'Asset': [1, 1, 2, 3, 3, 4],
    'performance': ['pass', 'fail', 'pass', 'fail', 'fail', 'pass']
}
df = pd.DataFrame(data)

# 按资产分组,计算每个资产的整体性能
asset_overall = df.groupby('Asset')['performance'].apply(lambda x: 'fail' if (x == 'fail').any() else 'pass')

# 将整体性能匹配到原表的每一行
df['overall performance'] = df['Asset'].map(asset_overall)

# 输出结果
print(df)

方法2:使用transform一步完成(更高效)

transform方法可以直接返回与原表行数一致的分组计算结果,无需额外映射步骤:

import pandas as pd

data = {
    'Asset': [1, 1, 2, 3, 3, 4],
    'performance': ['pass', 'fail', 'pass', 'fail', 'fail', 'pass']
}
df = pd.DataFrame(data)

# 直接生成整体性能列
df['overall performance'] = df.groupby('Asset')['performance'].transform(
    lambda x: 'fail' if (x == 'fail').any() else 'pass'
)

print(df)

逻辑说明

两种方法的核心逻辑一致:

  1. 按Asset列分组,对每组的performance值进行判断
  2. 只要组内存在至少一个fail,该资产的所有行整体性能就设为fail;反之则设为pass

运行代码后即可得到你期望的输出结果。


内容的提问来源于stack exchange,提问作者SneakyCosmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:30:45