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
添加回答
举报