Python 是否有方法在当前行中查找金额不为0的日期之前的最后一个日期?

Python 是否有方法在当前行中查找金额不为0的日期之前的最后一个日期?,python,pandas,Python,Pandas,我有一个熊猫数据帧,如: Date, Amount 01/01/2020, 10 01/02/2020, 15 01/03/2020, 0 01/04/2020, 11 01/05/2020, 0 01/06/2020, 15 01/07/2020, 12 ... 我想添加一个新列(即“之前”),显示自上次0金额以来的天数。e、 g Date, Amount, Before 01/01/2020, 10, 0 01/02/2020, 15, 0 01/03/2020, 0, 0 01/04/2

我有一个熊猫数据帧,如:

Date, Amount
01/01/2020, 10
01/02/2020, 15
01/03/2020, 0
01/04/2020, 11
01/05/2020, 0
01/06/2020, 15
01/07/2020, 12
...
我想添加一个新列(即“之前”),显示自上次0金额以来的天数。e、 g

Date, Amount, Before
01/01/2020, 10, 0
01/02/2020, 15, 0
01/03/2020, 0, 0
01/04/2020, 11, 1
01/05/2020, 0, 0
01/06/2020, 15, 1
01/07/2020, 12, 2
...
有什么想法吗


提前感谢您

您可以创建助手系列,用于比较
金额
by
0
和连续求和,筛选出第一组,并为
0
每组行创建
第一个
系列,然后从之前的
0
中减去天数:

df['Date'] = pd.to_datetime(df['Date'])

g = df['Amount'].eq(0).cumsum()
first = df.groupby(g[g > 0])['Date'].transform('first')
df['Before'] = df['Date'].sub(first).dt.days.fillna(0).astype(int)

print (df)
        Date  Amount  Before
0 2020-01-01      10       0
1 2020-01-02      15       0
2 2020-01-03       0       0
3 2020-01-04      11       1
4 2020-01-05       0       0
5 2020-01-06      15       1
6 2020-01-07      12       2
import numpy as np

previous_zero_idx = (
    (df.Amount == 0)
    .astype(int)  # convert bool to int
    .replace(0, np.nan)
    .mul(df.index)  # row name if value is zero, else np.nan
    .ffill()  # forward fill
)

df['Before'] = (df.index - previous_zero).fillna(0).astype(int)