我正在寻找一个更有效的方法来处理以下问题。我有一个数据框,其中一列填充了从1到4的随机值,我需要删除数据框中不遵循序列(1-2-3-4-1-2-3-...)的所有行。
A B
12/2/2022 0.02 2
14/2/2022 0.01 1
15/2/2022 0.04 4
16/2/2022 -0.02 3
18/2/2022 -0.01 2
20/2/2022 0.04 1
21/2/2022 0.02 3
22/2/2022 -0.01 1
24/2/2022 0.04 4
26/2/2022 -0.02 2
27/2/2022 0.01 3
28/2/2022 0.04 1
01/3/2022 -0.02 3
03/3/2022 -0.01 2
05/3/2022 0.04 1
06/3/2022 0.02 3
08/3/2022 -0.01 1
10/3/2022 0.04 4
12/3/2022 -0.02 2
13/3/2022 0.01 3
15/3/2022 0.04 1
...
这就是我需要的
A B
14/2/2022 0.01 1
18/2/2022 -0.01 2
21/2/2022 0.02 3
24/2/2022 0.04 4
28/2/2022 0.04 1
03/3/2022 -0.01 2
06/3/2022 0.02 3
10/3/2022 0.04 4
15/3/2022 0.04 1
...
由于 Dataframe 很大,我需要一些基于NumPy的操作来完成这个任务,越高效越好。我的解决方案非常丑陋和低效,基本上,我做了4个循环来检查序列的每一部分(4- 1,1 - 2,2 - 3,3 -4):
df_len = len(df)
df_len2 = 0
while df_len != df_len2:
df_len = len(df)
df.loc[(df.B.shift(1) == 4) & (df.B != 1), 'B'] = 0
df = df[df['B'] != 0]
df_len2 = len(df)
1条答案
按热度按时间68bkxrlz1#
通过
itertools.cycle
(定义循环范围):从itertools导入循环