python时间小于现在,Python pandas计算时间,直到列中的值大于当前时间段中的值

这段代码展示了如何利用numpy的triangular函数和argmax方法处理DataFrame,找出输出值之间的上三角矩阵,并计算出从当前时间到最早出现的更小输出值的时间差。对于没有匹配值的行,结果被设置为NaN。
摘要由CSDN通过智能技术生成

upper_triangle = np.triu(df.output.values < df.output.values[:, None])

df['s_until_dec'] = df['datetime'][upper_triangle.argmax(axis=1)].values - df['datetime']

df.loc[~upper_triangle.any(axis=1), 's_until_dec'] = np.nan

df

datetime output s_until_dec

0 2014-05-01 01:00:00 3 00:00:01

1 2014-05-01 01:00:01 2 00:00:03

2 2014-05-01 01:00:02 3 00:00:01

3 2014-05-01 01:00:03 2 00:00:01

4 2014-05-01 01:00:04 1 NaT

以下是它的工作原理:

df.output.values

df.output.values < df.output.values[:, None]

Out:

array([[False, True, False, True, True],

[False, False, False, False, True],

[False, True, False, True, True],

[False, False, False, False, True],

[False, False, False, False, False]], dtype=bool)

这里,例如,output [0]小于output [1],因此(0,1)的矩阵元素为True.我们需要上三角形,所以我用np.triu来得到这个矩阵的上三角形. argmax()会给我第一个True值的索引.如果我将其传递给iloc,我将得到相应的日期.当然除了最后一个.它有所有Falses所以我需要用np.nan替换它. .loc部分检查该情况的矩阵并替换为np.nan.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值