如何在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的记录的日期:
- 用
where方法标记出所有金额为0的行的日期,其他行暂时设为NaN - 用
ffill()(向前填充)把这些0金额的日期传递给后续的非0行 - 对于开头没有前置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列:
| Date | Amount | Before |
|---|---|---|
| 2020-01-01 | 10 | 0 |
| 2020-01-02 | 15 | 0 |
| 2020-01-03 | 0 | 0 |
| 2020-01-04 | 11 | 1 |
| 2020-01-05 | 0 | 0 |
| 2020-01-06 | 15 | 1 |
| 2020-01-07 | 12 | 2 |
完全匹配你想要的效果!
内容的提问来源于stack exchange,提问作者Francesco Morini
相关产品推荐
相关产品推荐

