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

在Pandas DataFrame中统计各Item的状态转换次数

Pandas状态转换捕获与统计解决方案

问题描述

我正在处理如下所示的Pandas DataFrame:

Items    Run    Status
T1       R1      OK
T2       R1      OK
T3       R1      OK
T4       R1      OK
T1       R2      NOK
T2       R2      OK
T3       R2      NOK
T4       R2      OK
T1       R3      OK
T2       R3      NOK
T3       R3      OK
T4       R3      OK

希望捕获每个Item的状态转换(OK与NOK之间的相互转换),同时统计每个Item的状态转换次数,最终得到如下格式的结果:

Items    Run    Status   Transition   Count of Transition per Items
T1       R1      OK      0             1
T1       R2      NOK     1 
T1       R3      OK      0
T2       R1      OK      0             1
T2       R2      OK      0
T2       R3      NOK     1
T3       R1      OK      0             2
T3       R2      NOK     1
T3       R3      OK      1
T4       R1      OK      0             0
T4       R2      OK      0
T4       R3      OK      0

实现步骤与代码

核心思路

  1. 按Items分组,对比每行与上一行的Status,标记是否发生转换
  2. 对每组的转换标记求和,得到每个Item的总转换次数,再将结果映射到对应组的所有行

代码实现

import pandas as pd

# 构造原始数据
data = {
    'Items': ['T1', 'T2', 'T3', 'T4', 'T1', 'T2', 'T3', 'T4', 'T1', 'T2', 'T3', 'T4'],
    'Run': ['R1', 'R1', 'R1', 'R1', 'R2', 'R2', 'R2', 'R2', 'R3', 'R3', 'R3', 'R3'],
    'Status': ['OK', 'OK', 'OK', 'OK', 'NOK', 'OK', 'NOK', 'OK', 'OK', 'NOK', 'OK', 'OK']
}
df = pd.DataFrame(data)

# 生成Transition列:对比当前行与上一行状态,不同则标记1,否则0
df['Transition'] = df.groupby('Items')['Status'].apply(
    lambda x: x.ne(x.shift()).astype(int)
).fillna(0).astype(int)

# 统计每个Item的总转换次数,并合并到原表
counts = df.groupby('Items')['Transition'].sum().rename('Count of Transition per Items')
df = df.merge(counts, on='Items', how='left')

# 调整列顺序匹配目标格式
df = df[['Items', 'Run', 'Status', 'Transition', 'Count of Transition per Items']]

# 打印结果
print(df.to_string(index=False))

结果说明

  • Transition列:1表示当前行相对于同一Item的上一行发生了状态转换,0表示未转换,每组第一行默认标记为0
  • Count of Transition per Items列:对应Item的总转换次数,该Item的所有行显示相同数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:45:39