1 回答

TA貢獻1835條經驗 獲得超7個贊
假設您有一個類型data為“日期”列和datetime64類型為“值”列的數據框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
然后你可以按日期的升序對數據幀進行排序,然后創建一個新列“prevdate”來復制“date”列但設置為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
現在您可以簡單地在兩個日期列之間進行減法并將差值轉換為整數:
>>> 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
添加回答
舉報