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

Pandas按账号分组求余额低于放款额5%的最小日期且不生成分组新df的方法

实现方法

核心逻辑

  1. 先筛选出所有满足*本金余额低于放款额5%*条件的行
  2. 按account_number分组取符合条件行的period_date最小值
  3. 将最小值按账号映射回原DataFrame的所有对应行,无符合条件记录的账号自动填充空值

可直接运行的代码

你可以用transform方法一行实现,无需额外生成分组后的新表:

df['churn_date'] = df[df['principal_balance_amt'] <= 0.05 * df['disbursement_amt']]\
                    .groupby('account_number')['period_date']\
                    .transform('min')

也可以分两步写,可读性更强:

# 先计算每个账号符合条件的最小日期映射表
account_min_date = df[df['principal_balance_amt'] <= 0.05 * df['disbursement_amt']]\
                    .groupby('account_number')['period_date'].min()
# 映射到原表新增列
df['churn_date'] = df['account_number'].map(account_min_date)

原代码错误说明

你之前的代码存在语法和逻辑双重问题:

  • groupby必须绑定DataFrame对象调用,不能直接写groupby('account_number')
  • 筛选条件不能嵌套在groupby方法内部,需要提前过滤或者在分组后指定筛选逻辑
  • 直接取分组后的min()返回的是索引为账号的Series,和原表的行索引不匹配,无法直接赋值给新列,需要用transform或者map做对齐

内容的提问来源于stack exchange,提问作者Oskar Söderlund

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:02