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

Pandas分组统计与更新:按ID统计Coeff>Result次数并更新TP/FP

解决方法:按ID统计条件次数并计算TP/FP

嘿,我来帮你搞定这个需求!用pandas可以很流畅地实现你的统计逻辑,下面是具体步骤和代码:

步骤1:筛选目标行

首先我们只需要关注Status列为1的记录,先把这部分数据筛选出来:

# 筛选Status=1的子集
target_rows = df[df['Status'] == 1]

步骤2:按ID统计符合条件的次数

接下来按ID分组,统计每个ID下Coeff大于Result的次数:

# 分组统计次数,结果保存为带count列的DataFrame
id_counts = target_rows.groupby('ID').apply(
    lambda group: (group['Coeff'] > group['Result']).sum()
).reset_index(name='count')

这里的apply函数会对每个ID对应的组,计算Coeff > Result的布尔值之和(True=1,False=0),得到的就是每个ID符合条件的次数。

步骤3:计算TP和FP

最后根据count列的值,统计TP和FP的数量:

# 统计次数>3的ID数量(TP)
TP = len(id_counts[id_counts['count'] > 3])
# 统计次数<=3的ID数量(FP)
FP = len(id_counts[id_counts['count'] <= 3])

补充说明

如果你的数据集里存在没有Status=1记录的ID,这些ID不会被统计到id_counts里,如果你需要把它们归为FP(或者其他逻辑),可以先获取所有唯一ID,再和id_counts做左连接,把缺失的count填充为0后再统计。比如:

import pandas as pd

# 获取所有唯一ID
all_ids = df['ID'].unique()
# 转换为DataFrame
all_ids_df = pd.DataFrame({'ID': all_ids})
# 左连接,填充缺失的count为0
id_counts_full = pd.merge(all_ids_df, id_counts, on='ID', how='left').fillna(0)
# 重新统计TP和FP
TP = len(id_counts_full[id_counts_full['count'] > 3])
FP = len(id_counts_full[id_counts_full['count'] <= 3])

这样就完全覆盖了所有ID的情况啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:46