52g*_*g44 7 python dataframe python-3.x pandas
我有一个如下数据框:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试通过以下方式清理数据框:对于具有大于前一行值的1.5倍或小于前一行值的0.5倍的每一行,请将其删除。但是,如果前一行是拖放行,则必须与紧邻的前一个非拖放行进行比较。(例如,我的数据帧中的索引9、10或13)因此,最终的数据帧应类似于:
A
1 1000
2 1000
3 1001
4 1001
6 1000
7 1010
11 999
14 1000
Run Code Online (Sandbox Code Playgroud)
我的数据框确实很大,因此性能值得赞赏。
我将一系列传递给一个函数,并产生满足条件的行的索引值。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |