python - 根据前一行的值从数据框中过滤行

标签 python python-3.x pandas dataframe

我有一个如下所示的数据框:

    A
1   1000
2   1000
3   1001
4   1001
5   10
6   1000
7   1010
8   9
9   10
10  6
11  999
12  10110
13  10111
14  1000 

我正在尝试通过以下方式清理我的数据框: 对于值大于前一行值 1.5 倍或小于前一行值 0.5 倍的每一行,将其删除。 但如果前一行是要删除的行,则必须与前一个非要删除的行进行比较。 (例如我的数据框中的索引 9、10 或 13) 所以最终的数据框应该是这样的:

    A
1   1000
2   1000
3   1001
4   1001
6   1000
7   1010
11  999
14  1000

我的数据框非常巨大,因此性能值得赞赏。

最佳答案

你无法摆脱循环遍历每一行

尖端
  • 避免为每行创建新的(创建成本较高的)对象
  • 使用内存高效迭代
<小时/>

我会使用发电机

我将向函数传递一个序列并生成满足条件的行的索引值。

def f(s):
    it = s.iteritems()
    i, v = next(it)
    yield i                          # Yield the first one
    for j, x in it:
        if .5 * v <= x <= 1.5 * v:
            yield j                  # Yield the ones that satisfy
            v = x                    # Update the comparative value

df.loc[list(f(df.A))]                # Use `loc` with index values
                                     # yielded by my generator

       A
1   1000
2   1000
3   1001
4   1001
6   1000
7   1010
11   999
14  1000

关于python - 根据前一行的值从数据框中过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58959281/

相关文章:

python-3.x - librosa 加载声音文件改变它的形状和文件大小

python - Pandas 将字典分解为行

python - 如何将数据帧与数组时间戳合并并根据数组的条件进行绘图?

python - 如何使用 scikit-learn 中的信息增益度量选择 Dataframe 中的最佳特征

python - 在 python 列表中交换元素的时间复杂度

python - 我如何才能可靠地访问一个太大而无法加载到内存中的 JSON 文件中的单个键值对?

python - 从图表中提取绘图线

python - "from module import class"从同一模块导入其他类

Python 2.7 (urllib2)。如何使用 SSL HTTPS 代理?

python - 写在装饰器前后