我在一个数据框中有以下数据.

Timestamp MeasureA MeasureB MeasureC MeasureD
0.00 26.46 63.60 3.90 0.67
0.94 26.52 78.87 1.58 0.42
1.94 30.01 82.04 1.13 0.46
3.00 30.19 82.00 1.17 0.36
4.00 30.07 81.43 1.13 0.42
5.94 30.02 82.46 1.05 0.34
8.00 30.22 82.48 0.98 0.35
9.00 30.00 82.21 1.13 0.33
10.00 30.00 82.34 1.12 0.34

我想用一些不均匀的间隔来过滤这些条目.假设我的间歇时间是[1.0, 1.5]

我试图实现的是,我们 Select 第一行(row0),为了获得下一个有效行,我们查看其Timestamp值大于或等于row0 + 1.0的下一行是什么.

在此场景中,下一个有效行将是时间戳为1.94的行.然后,对于下一个有效行,我们将使用间隔数组中的下一项.也就是1.5.这将使下一行的值为timestamp,为4.00.因为1.94 + 1.5等于3.44.

对于下一行,我们返回并从间隔数组的开始处开始.

判断完所有数据后,生成的数据帧应为:

Timestamp MeasureA MeasureB MeasureC MeasureD
0.00 26.46 63.60 3.90 0.67
1.94 30.01 82.04 1.13 0.46
4.00 30.07 81.43 1.13 0.42
5.94 30.02 82.33 1.11 0.35
8.00 30.22 82.48 0.98 0.35
9.00 30.00 82.21 1.13 0.33

有没有办法用大Pandas 现有的过滤方法来实现这一点?

推荐答案

try :

from itertools import cycle

# the interval:
A, B = 1.0, 1.5

comparing, out, last_t = cycle([B, A]), [], float("-inf")
j = next(comparing)

for i, t in zip(df.index, df.Timestamp):
    if t >= last_t + j:
        out.append(i)
        last_t = t
        j = next(comparing)

print(df.loc[out])

打印:

   Timestamp  MeasureA  MeasureB  MeasureC  MeasureD
0       0.00     26.46     63.60      3.90      0.67
2       1.94     30.01     82.04      1.13      0.46
4       4.00     30.07     81.43      1.13      0.42
5       5.94     30.02     82.46      1.05      0.34
6       8.00     30.22     82.48      0.98      0.35
7       9.00     30.00     82.21      1.13      0.33

Python相关问答推荐

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

try 在树叶 map 上应用覆盖磁贴

可变参数数量的重载类型(args或kwargs)

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

对象的`__call__`方法的setattr在Python中不起作用'

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

什么是最好的方法来切割一个相框到一个面具的第一个实例?

如何指定列数据类型

在Python中计算连续天数

Maya Python脚本将纹理应用于所有对象,而不是选定对象

干燥化与列姆化的比较

不允许 Select 北极滚动?

如何为需要初始化的具体类实现依赖反转和接口分离?

类型对象';敌人';没有属性';损害';

文本溢出了Kivy的视区

如何在python tkinter中绑定键盘上的另一个回车?

对当前的鼹鼠进行编码,并且我的按键获得了注册

如何使用Polars从AWS S3读取镶木地板文件

将参数从另一个python脚本中传递给main(argv