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
相关产品推荐
相关产品推荐

