首页 > 解决方案 > 有没有办法找到当前行中金额不为0的日期之前的最后一个日期?

问题描述

我有一个熊猫数据框,例如:

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 金额以来的天数。例如

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
...

有任何想法吗?

先感谢您

标签: pythonpandas

解决方案


您可以创建 helper Series 以与连续 sum byAmount进行比较,过滤出第一组并为每组的行创建Series by和,然后从以前的天数中减去天数:0Series.cumsumfirst0GroupBy.transformGroupBy.first0

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

推荐阅读