1 回答
TA贡献1906条经验 获得超10个赞
您可以使用滑动窗口进行比较:
result = df.loc[df['A'] != 0, 'B'].rolling(4).apply(
lambda x: x[-2:].min() > x[:2].min(), raw=True)
如果不应该直接比较非零项,而是应该将它们的位置作为特定范围的边界,那么您可以使用此修改:
result = df.index[df['A'] != 0].to_series().rolling(4).apply(
lambda x: df.loc[x[2]:x[3], 'B'].min() > df.loc[x[0]:x[1], 'B'].min(), raw=True)
作为参考,这里是示例数据框(使用0forNone和1else,但原理相同):
import numpy as np
import pandas as pd
df = pd.DataFrame([[0, 0]]*24, columns=list('AB'), index=range(1, 25))
df.loc[[3, 6, 11, 14, 22], 'A'] = 1
df['B'] = np.random.randint(0, 100, size=len(df))
print(df)
如下所示:
A B
1 0 98
2 0 99
3 1 73
4 0 42
5 0 76
6 1 80
7 0 91
8 0 40
9 0 15
10 0 51
11 1 93
12 0 82
13 0 73
14 1 86
15 0 71
16 0 84
17 0 62
18 0 20
19 0 53
20 0 12
21 0 68
22 1 97
23 0 74
24 0 51
添加回答
举报