Pandas如何筛选同id同金额且月日误差±5天内的周期性付款记录
实现方案
你可以在原有筛选逻辑的基础上,增加分组校验付款日极差的步骤,具体代码如下:
import pandas as pd # 示例数据 d = {'id':[1,1,1,3,3,3,5,5,5], 'day_of_month':[2,2,5,4,6,8,10,15,25], 'amount':[1000,1000,50,1500,3000,1500,4000,2000,2000]} dd = pd.DataFrame(d) # 1、筛选同id、同金额至少出现2次的记录 dup_df = dd[dd.duplicated(subset = ['id','amount'], keep = False)] # 2、按id、amount分组,过滤付款日差超出±5天范围的分组 # 阈值可根据业务调整:允许刚好±5则设为10,严格小于±5可设为9 threshold = 9 res = dup_df[dup_df.groupby(['id','amount'])['day_of_month'].transform(lambda x: x.max() - x.min()) <= threshold] print(res)
输出结果
id day_of_month amount 0 1 2 1000 1 1 2 1000 3 3 4 1500 5 3 8 1500
逻辑说明
- 第一步先过滤掉同id同金额仅出现一次的非重复记录,和你原有逻辑一致
- 第二步对每个(id,金额)分组计算所有付款日的极差(最大值减最小值),仅保留极差在阈值范围内的分组,就能过滤掉付款日差超出±5天的假阳性结果
- 阈值可灵活调整:如果允许付款日刚好落在±5的边界(比如基准日20号,付款日15号和25号,极差为10),把
threshold改为10即可。
内容的提问来源于stack exchange,提问作者Unicorn07
相关产品推荐
相关产品推荐

