1 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
假設(shè)您有一個(gè)類型data為“日期”列和datetime64類型為“值”列的數(shù)據(jù)框int64:
>>> data
date value
0 2020-04-30 0
1 2020-04-29 0
2 2020-04-28 1
3 2020-03-31 6
4 2020-03-30 1
5 2020-03-29 3
6 2020-02-29 0
7 2020-01-31 0
8 2020-01-30 0
9 2020-01-29 1
>>> data.dtypes
date datetime64[ns]
value int64
dtype: object
然后你可以按日期的升序?qū)?shù)據(jù)幀進(jìn)行排序,然后創(chuàng)建一個(gè)新列“prevdate”來復(fù)制“date”列但設(shè)置為NaT值為 0 的行,如下所示:
data['prevdate'] = data['date'].where(data['value'].ne(0))
然后向前填充NaT值:
>>> data.sort_values('date', inplace=True)
>>> data['prevdate'] = data['date'].where(data['value'].ne(0)).fillna(method='ffill')
>>> data
date value prevdate
9 2020-01-29 1 2020-01-29
8 2020-01-30 0 2020-01-29
7 2020-01-31 0 2020-01-29
6 2020-02-29 0 2020-01-29
5 2020-03-29 3 2020-03-29
4 2020-03-30 1 2020-03-30
3 2020-03-31 6 2020-03-31
2 2020-04-28 1 2020-04-28
1 2020-04-29 0 2020-04-28
0 2020-04-30 0 2020-04-28
現(xiàn)在您可以簡單地在兩個(gè)日期列之間進(jìn)行減法并將差值轉(zhuǎn)換為整數(shù):
>>> data['days'] = (data['date'] - data['prevdate']).apply(lambda x: x.days)
>>> data
date value prevdate days
9 2020-01-29 1 2020-01-29 0
8 2020-01-30 0 2020-01-29 1
7 2020-01-31 0 2020-01-29 2
6 2020-02-29 0 2020-01-29 31
5 2020-03-29 3 2020-03-29 0
4 2020-03-30 1 2020-03-30 0
3 2020-03-31 6 2020-03-31 0
2 2020-04-28 1 2020-04-28 0
1 2020-04-29 0 2020-04-28 1
0 2020-04-30 0 2020-04-28 2
添加回答
舉報(bào)