【发布时间】:2021-03-20 05:40:02
【问题描述】:
我有以下数据框和预期的输出,我在 balance 列中搜索 True 的值。一旦找到,我对该行使用balPrice 列值并将其与endPrice 列进行比较,以查找endPrice 低于balPrice 的第一个实例,并计算balance == True 行中的行数和找到较低值行的第一个实例。如果没有找到更低的值,则将行数设置为 0。
balance balPrice endPrice
0 False 5.34 5.34
1 False 5.34 5.34
2 False 5.34 5.34
3 False 5.34 5.27
4 False 5.44 5.25
5 False 5.28 5.12
6 True 5.31 5.2
7 False 5.44 5.35
8 False 5.485 5.44
9 False 5.525 5.5
10 False 5.53 5.53
11 False 5.58 5.51
12 False 5.65 5.52
13 False 5.3 5.3
14 False 5.58 5.54
15 False 5.64 5.55
16 True 5.69 5.65
17 False 5.69 5.59
18 False 5.7 5.62
19 False 5.81 5.77
20 False 5.65 5.73
21 False 5.65 5.86
22 True 6.00 5.89
23 False 5.65 5.85
24 False 5.65 5.83
25 False 5.9 5.88
这是我尝试过的,看起来很复杂。正在寻找更好的解决方案。
df_filtered = df[df.balance == True]
idx = []
for i in df_filtered.index:
pos = np.where(df.endPrice[i+1:] <= df.balPrice[i])[0]
if pos.size > 0:
idx.append(pos[0]+1)
else:
idx.append(0)
df_filtered['numrows'] = idx
预期输出:
balance balPrice endPrice numrows
True 5.31 5.2 7
True 5.69 5.65 1
True 6.00 5.89 1
【问题讨论】:
-
请以文本形式包含数据,以便我们复制它们。 Images cannot be copied
-
比较
idx元素的示例代码和屏幕截图,不清楚如何计算numrows。 -
numrows 是具有 balance == True 的列与 endPrice 列的条件小于或等于 balPrice 的值的第一个实例之间的行数,其中 balance ==真的。 idx 列表是满足条件的 np.where 数组的第一个元素。
-
您的代码会为该数据生成
[7, 1, 1]- 行17和23满足该条件。 -
你是对的,我的错我剪切粘贴不正确。