我有一个 Dataframe :
df a b
7 2019-05-01 00:00:01
6 2019-05-02 00:15:01
1 2019-05-06 00:10:01
3 2019-05-09 01:00:01
8 2019-05-09 04:20:01
9 2019-05-12 01:10:01
4 2019-05-16 03:30:01
还有l = [datetime.datetime(2019,05,02), datetime.datetime(2019,05,10), datetime.datetime(2019,05,22) ]
我想添加一列,内容如下:对于每一行,从l开始找出它之前的最后一个日期,并加上它们之间的天数。如果没有一个日期小于l,则加上最小日期的差值。因此,新列将是:
df a b. delta date
7 2019-05-01 00:00:01 -1 datetime.datetime(2019,05,02)
6 2019-05-02 00:15:01 0 datetime.datetime(2019,05,02)
1 2019-05-06 00:10:01 4 datetime.datetime(2019,05,02)
3 2019-05-09 01:00:01 7 datetime.datetime(2019,05,02)
8 2019-05-09 04:20:01 7 datetime.datetime(2019,05,02)
9 2019-05-12 01:10:01 2 datetime.datetime(2019,05,10)
4 2019-05-16 03:30:01 6 datetime.datetime(2019,05,10)
我该怎么做?
3条答案
按热度按时间uhry853o1#
使用
merge_asof
对齐df['b']
和列表(作为Series),然后计算差值:输出:
ymdaylpp2#
如果你的
b
列有datetime
对象,这里有一行的解决方案。否则,将其转换为datetime
对象。说明:对每一行应用一个函数:
datetime
与l
中存在的每个datetime
之间的deltatime
,然后将其存储在列表中deltatime
的秒数对此列表排序deltatime
)并返回其days
kcugc4gi3#
此代码将此数据集分隔在