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

Pandas实现按user和code分组的自定义增减计数器列

解决方案

实现步骤

  1. 映射动作到增量值:将action列的OUT转为1,IN转为-1,简化后续计算逻辑。
  2. 分组累积求和:按user和code分组后,对增量值计算累积和,得到计数器的初步变化趋势。
  3. 强制非负修正:对累积和结果取与0的最大值,确保任何时刻计数器都不会出现负数。

代码示例

先模拟一个符合你描述的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'user': ['U1', 'U1', 'U1', 'U2', 'U2', 'U2'],
    'code': ['C001', 'C001', 'C001', 'C002', 'C002', 'C002'],
    'action': ['OUT', 'IN', 'OUT', 'IN', 'OUT', 'OUT']
})

执行以下代码即可实现需求:

# 1. 给动作映射增量值
df['delta'] = df['action'].replace({'OUT': 1, 'IN': -1})

# 2. 分组计算累积和,同时强制结果非负
df['counter'] = df.groupby(['user', 'code'])['delta'].cumsum().clip(lower=0)

# 可选:删除中间辅助列delta
df = df.drop('delta', axis=1)

结果示例

运行后得到的counter列完全符合预期:

usercodeactioncounter
U1C001OUT1
U1C001IN0
U1C001OUT1
U2C002IN0
U2C002OUT1
U2C002OUT2

关键细节

  • clip(lower=0)可以直接把所有负值修正为0,完美解决“计数器不允许为负”的要求。
  • 分组后使用cumsum()实现逐行累积计算,保证每个user+code组合的计数器独立变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:17:03