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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:33:51