【发布时间】:2019-10-15 10:57:43
【问题描述】:
我在 pycharm 中使用带有 pandas 的 python 3.4
我已将我的数据排列在一个看起来或多或少像这样的 pandas 数据框中:
import pandas as pd
data = {'step': [1, 2, 2, 3, 4, 4, 4, 5, 5, 4, 5, 6, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8],
'trials': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]}
temp_df = pd.DataFrame(data=data)
问题在于 row[15] 处的“step”和 row[16] 处的 step 分别为 8 和 1,这种差异对于我正在运行的分析类型是不能容忍的。所以我想排除/删除/删除第 15 行和值“步骤”返回到行 [15] 的行之间的所有行,在这种情况下为 8,可以在行 [23 ]。 [收到第一个答案后编辑] 请记住,规则是任何后续值只能是 +/- 1。因此,例如,第 [9] 行的“步”是 4,它小于“步”在row[8] 是 5。这样的差异是允许的,任何大于 +- 1 的差异都是不允许的。
这只是一个例子,真实数据有几十万行,所以我希望在我的数据框中不止一次出现这个问题。
我一直在寻找使用 for 循环等来遍历行的方法,但有人警告我这些方法非常慢。在任何情况下,我都想不出一个有效的 for 循环。
我也未能找到一种无需循环且仅使用 pandas 和某种逻辑索引的智能编程方式。我什至不确定这是否可能不进行迭代。现在我可以成功找到所有行 [i] 和行 [i+1] 的差异大于模数1 的行并在逻辑上对其进行索引,但我被困在这一点上。
最终我会创建一个数据框,其中排除了 16 到 22 的行。
【问题讨论】:
标签: python pandas dataframe iteration