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

基于行内条件填充Pandas DataFrame(对标Excel COUNTIFS函数)

高效实现CountPreviousMonth列的Python方案

需求回顾

新增CountPreviousMonth列需满足以下规则:

  • 仅统计同一Cond1分组内的行
  • 统计行需满足Amount ≠ 0
  • 统计行的Month必须早于当前行的Month
  • 特殊情况:Month=1时计数为0;当前行Amount=0时,计数继承该分组前序有效计数

最优实现(基于Pandas矢量化操作)

利用Pandas的分组与矢量化计算,完全避免循环,适配大数据量场景:

步骤1:数据预处理(确保排序)

import pandas as pd

# 替换为你的实际数据集
df = pd.read_csv("your_data.csv")

# 关键前提:按Cond1和Month升序排列,保证月份顺序正确
df = df.sort_values(['Cond1', 'Month']).reset_index(drop=True)

步骤2:计算目标列

# 标记Amount不为0的有效行
df['is_valid'] = df['Amount'] != 0

# 按Cond1分组,累计有效行数量后下移一行,实现"统计之前月份"的需求
df['CountPreviousMonth'] = df.groupby('Cond1')['is_valid'].cumsum().shift(fill_value=0)

# 清理临时列(可选)
df.drop('is_valid', axis=1, inplace=True)

示例结果验证

假设输入示例数据:

Cond1MonthAmount
a1100
a2200
a30
b150
b20
b3150

处理后输出:

Cond1MonthAmountCountPreviousMonth
a11000
a22001
a302
b1500
b201
b31501

方案优势

  • 全程采用Pandas矢量化操作,无显式循环,处理百万级数据效率远超循环实现
  • 分组逻辑自动适配多Cond1分组场景,无需额外分支判断
  • shift(fill_value=0)直接实现"仅统计早于当前月份"的需求,逻辑简洁直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:15:39