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

Pandas按优先级分组求有效数据的平均工单打开时长

解决方法

有两种可行方案,优先推荐第一种:

方案一:将无效值转为NaN(推荐)

直接把"No Data"替换成pandas的缺失值np.nan,同时将列转换为数值类型,这样分组计算均值时会自动忽略缺失值,正好符合需求:

import pandas as pd
import numpy as np

# 原始数据
df = {
'inc_priority2':['Critical','Critical','Critical','High','High','High','Medium','Medium','Low'],
'inc_open_minutes':['No Data',10,6,
                    'No Data',4,2,
                    'No Data',5,
                    3],
}
df = pd.DataFrame(dict(df))

# 处理无效值并转换列类型
df['inc_open_minutes'] = pd.to_numeric(df['inc_open_minutes'], errors='coerce')

# 分组计算均值
dfTemp = df.groupby('inc_priority2')['inc_open_minutes'].mean().reset_index()
dfTemp.columns = ['inc_priority2', 'Avg inc_open_minutes']
print(dfTemp)

运行结果:

inc_priority2  Avg inc_open_minutes
0      Critical                   8.0
1          High                   3.0
2        Medium                   5.0
3           Low                   3.0

pd.to_numeric的errors='coerce'参数会把无法转为数值的内容(比如"No Data")自动转成np.nan,后续mean()计算时会直接跳过这些缺失值。

方案二:替换为0后过滤非零值计算均值

如果一定要把"No Data"替换成0,可分组后对每个组过滤掉0值再计算均值:

import pandas as pd
import numpy as np

# 原始数据
df = {
'inc_priority2':['Critical','Critical','Critical','High','High','High','Medium','Medium','Low'],
'inc_open_minutes':['No Data',10,6,
                    'No Data',4,2,
                    'No Data',5,
                    3],
}
df = pd.DataFrame(dict(df))

# 替换No Data为0并转数值类型
df['inc_open_minutes'] = df['inc_open_minutes'].replace('No Data', 0).astype(int)

# 分组后过滤0值计算均值
dfTemp = df.groupby('inc_priority2')['inc_open_minutes'].apply(lambda x: x[x != 0].mean()).reset_index()
dfTemp.columns = ['inc_priority2', 'Avg inc_open_minutes']
print(dfTemp)

该方案也能得到目标结果,但需额外过滤操作,不如方案一简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:42:08