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

如何在Pandas DataFrame中查找上次非0金额日期并计算距上次0金额天数?

当然有办法搞定这个需求!用Pandas的几个内置方法就能轻松实现,我给你拆解一下步骤:

实现思路与代码

首先,得确保你的Date列是datetime类型——这是计算天数差的前提:

import pandas as pd

# 假设你的数据存储在名为df的DataFrame中
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

接下来,我们要为每一行找到上一笔金额为0的记录的日期:

  1. 用where方法标记出所有金额为0的行的日期,其他行暂时设为NaN
  2. 用ffill()(向前填充)把这些0金额的日期传递给后续的非0行
  3. 对于开头没有前置0记录的行,用fillna()把NaN替换为当前行的日期,这样计算出来的天数差就是0,完全符合你给出的示例规则

对应的代码如下:

# 生成上一笔0金额记录的日期列
prev_zero_date = df['Date'].where(df['Amount'] == 0).ffill().fillna(df['Date'])

# 计算当前日期与上一笔0金额日期的天数差,生成Before列
df['Before'] = (df['Date'] - prev_zero_date).dt.days
验证结果

运行完上面的代码后,你的DataFrame就会生成符合预期的Before列:

DateAmountBefore
2020-01-01100
2020-01-02150
2020-01-0300
2020-01-04111
2020-01-0500
2020-01-06151
2020-01-07122

完全匹配你想要的效果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:42:47