如何在Pandas中基于条件计数创建计算列IP_cnt
用Pandas实现按IP统计target=1的次数并添加新列
问题描述
现有如下DataFrame:
IP target 101 1 101 1 102 0 103 1 41 0 47 0 47 1 47 1
需要生成包含IP_cnt列的目标DataFrame,其中IP_cnt为对应IP的target值为1的出现次数,目标输出如下:
IP IP_cnt target 101 2 1 101 2 1 102 0 0 103 1 1 41 0 0 47 2 0 47 2 1 47 2 1
解决方案
可以通过Pandas的groupby+transform组合快速实现需求,核心逻辑是按IP分组统计target=1的次数,再将统计结果映射回原DataFrame的每一行:
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'IP': [101, 101, 102, 103, 41, 47, 47, 47], 'target': [1, 1, 0, 1, 0, 0, 1, 1] }) # 生成IP_cnt列:按IP分组后对target求和(1的总和即为出现次数) df['IP_cnt'] = df.groupby('IP')['target'].transform('sum') # 调整列顺序以匹配目标输出(可选操作) df = df[['IP', 'IP_cnt', 'target']] print(df)
代码说明
groupby('IP')['target']:按IP字段分组,提取每组的target列transform('sum'):对每组的target求和(由于target只有0和1,求和结果等价于该IP下target=1的出现次数),同时transform会保持原DataFrame的行数,将统计结果对应到每一行- 调整列顺序是为了和目标输出的列排列一致,若不需要可省略此步骤
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

