pandas按条件计算日期整月差值 不足1月返回0的实现方法
实现方案
你的核心思路用月份周期做差是正确的,只需要修正两个细节:一是先确保日期列被正确解析为pandas的datetime类型,二是直接对Period对象做差后取整数差值,不要直接强转Period为int(不同版本下强转逻辑可能不一致)。
完整可运行代码
import pandas as pd # 第一步:将两列日期解析为datetime格式,自动适配月/日/年的输入格式 df['reg'] = pd.to_datetime(df['reg']) df['in'] = pd.to_datetime(df['in']) # 第二步:计算月份差,结果为整数类型,天然满足不足1个月返回0的规则 df['new_month'] = (df['in'].dt.to_period('M') - df['reg'].dt.to_period('M')).apply(lambda x: x.n) # 可选:如果存在in日期早于reg的异常数据,用下面代码把负数差值统一置为0 # df['new_month'] = df['new_month'].clip(lower=0)
计算逻辑说明
- 该方案按月份所属周期计算差值,和天级别的间隔无关:同月份的两个日期无论间隔多少天,差值都为0,完全匹配规则要求
- 自动适配跨年的月份计算,不需要手动处理年份差*12的转换逻辑
- 计算结果默认是整数类型,不需要额外做类型转换
结果验证
用提供的样例数据运行后,输出和期望完全一致:
reg in new_month 0 2021-09-01 2021-09-30 0 1 2021-09-08 2021-11-22 2 2 2021-09-08 2022-01-13 4 3 2021-10-01 2021-10-15 0 4 2022-11-02 2023-05-01 6
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

