为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas DataFrame 在满足条件的前几行中查找最接近的索引

Pandas DataFrame 在满足条件的前几行中查找最接近的索引

阿波罗的战车 2022-08-02 18:34:03
我有以下数据帧:df1    t       A0   23:00   21   23:01   12   23:02   23   23:03   24   23:04   65   23:05   56   23:06   47   23:07   98   23:08   79   23:09   1010  23:10   8对于每个(此处简化了增量,在现实生活中不均匀分布),我想找到(如果有的话)前5分钟内的最新时间。我想得到:ttrA(t)- A(tr) >= 4    t       A    tr0   23:00   21   23:01   12   23:02   23   23:03   24   23:04   6    23:035   23:05   5    23:016   23:06   47   23:07   9    23:068   23:08   79   23:09   10   23:0610  23:10   8    23:06目前,我可以使用将每行与上一行进行比较,例如.shift(-1)cond = df1['A'] >= df1['A'].shift(-1) + 4我怎样才能及时看到更远的地方?
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

假设你的数据是连续的,那么你可以做通常的移位:


df1['t'] = pd.to_timedelta(df1['t'].add(':00'))


df = pd.DataFrame({i:df1.A - df1.A.shift(i) >= 4 for i in range(1,5)})


df1['t'] - pd.to_timedelta('1min') * df.idxmax(axis=1).where(df.any(1))

输出:


0         NaT

1         NaT

2         NaT

3         NaT

4    23:03:00

5    23:01:00

6         NaT

7    23:06:00

8         NaT

9    23:06:00

10   23:06:00

dtype: timedelta64[ns]


查看完整回答
反对 回复 2022-08-02
?
跃然一笑

TA贡献1826条经验 获得超6个赞

我添加了一个索引并使用 ,它现在包括了简单索引窗口之外的时间窗口功能。datetimerolling()


import pandas as pd

import numpy as np

import datetime


df1 = pd.DataFrame({'t' : [

        datetime.datetime(2020, 5, 17, 23, 0, 0),

        datetime.datetime(2020, 5, 17, 23, 0, 1),

        datetime.datetime(2020, 5, 17, 23, 0, 2),

        datetime.datetime(2020, 5, 17, 23, 0, 3),

        datetime.datetime(2020, 5, 17, 23, 0, 4),

        datetime.datetime(2020, 5, 17, 23, 0, 5),

        datetime.datetime(2020, 5, 17, 23, 0, 6),

        datetime.datetime(2020, 5, 17, 23, 0, 7),

        datetime.datetime(2020, 5, 17, 23, 0, 8),

        datetime.datetime(2020, 5, 17, 23, 0, 9),

        datetime.datetime(2020, 5, 17, 23, 0, 10)

        ], 'A' : [2,1,2,2,6,5,4,9,7,10,8]}, columns=['t', 'A'])

df1.index = df1['t']

df2 = df1

cond = df1['A'] >= df1.rolling('5s')['A'].apply(lambda x: x[0] + 4)

result = df1[cond]


t                         A

2020-05-17 23:00:04       6

2020-05-17 23:00:05       5

2020-05-17 23:00:07       9

2020-05-17 23:00:09      10

2020-05-17 23:00:10       8


查看完整回答
反对 回复 2022-08-02
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号