首页 > 解决方案 > Pandas 中将元组分配给段的最有效方法

问题描述

我编写了以下将元组分配给段的代码。段是元组的容器,跨越一定的时间间隔。与只有 1 个时间戳的元组相反。

然而,由于我的代码有大约 30 000 个元组,而且这一步迭代非常频繁,所以在这个方法上花费了很多时间。

有没有更有效的方法来处理这个问题?

for timestamp, tuple in tuples.iterrows():
    this_seg = [s for s in segments if s.can_have(timestamp)]
    assert(len(this_seg) <= 1)
    for s in this_seg:
        s.append(tuple)
return segments

以下是更多上下文:

Segment是 Segment 类型的类,具有如下构造函数:

def __init__(self, ts_max, ts_min):
            self._df = pd.DataFrame({})
            self._ts_max = ts_max
            self._ts_min = ts_min

方法 can_have 检查给定的时间戳是否可以是段的一部分:即时间戳位于 ts_min 和 ts_max 之间。

Tuples是一个 Pandas 数据帧,它有时间戳作为索引,其他一些特征作为列。

标签: pythonpandas

解决方案


Iterrows 是 Pandas 中最慢的处理方式。从您的问题中不清楚您要做什么,但本教程提供了几个更快的 iterrows 替代品。

https://realpython.com/fast-flexible-pandas/


推荐阅读