我有一个如下所示的数据框:
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/