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
...
有什么想法吗
提前感谢您您可以创建助手系列,用于比较
金额
by0
和连续求和,筛选出第一组,并为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)