Просто еще один способ обдумать ваш подход:
Сначала преобразуйте столбец Date
в дату и время, используя функцию панд to_datetime
.
df['Date'] = pd.to_datetime(df['Date'])
Теперь возьмите разницу по дням, используя groupby
, который покажет значения разности и отдыха, которые будут получены как NaN
df['Difference'] = df[df['Amount'] > 0].groupby(['UserId'])['Date'].diff().dt.days
df
UserId Date Amount Difference
0 1 2017-01-01 0 NaN
1 1 2017-01-03 10 NaN
2 2 2017-01-04 20 NaN
3 2 2017-01-07 15 3.0
4 2 2017-01-09 7 2.0
Теперь, наконец, заполните все поля NaN's
до -1
в столбце DataFrames Difference
.
df['Difference'] = df['Difference'].fillna("-1")
# df = df.fillna("-1") <-- this do the Job but in case you have NaNs in other location in df it will also replace them as `-1`
Результат:
df
UserId Date Amount Difference
0 1 2017-01-01 0 -1
1 1 2017-01-03 10 -1
2 2 2017-01-04 20 -1
3 2 2017-01-07 15 3
4 2 2017-01-09 7 2