如何迭代 pandas 数据帧中每一行的下 N 个元素的 window
How to iterate over window of next N elements for each row in pandas dataframe
我在数据框中标记行时遇到问题。这个想法是我想知道当前(迭代)值乘以小浮点数是否高于数据帧中接下来的 60 行中的任何一行。
我已经找到了一个可行的解决方案,但不幸的是速度很慢。我尝试使用 .apply 和列表理解来实现,但失败了。
代码如下所示:
for i in range(df.shape[0] - 1):
label.append((df.iloc[i+1:window+i]['value'] > df.iloc[i]['value'] * small_threshold).any())
所以基本上可以说我有这个 df
idx
value
0
2.00
1
2.01
2
1.98
3
2.01
4
2.02
我想针对接下来的 3 行标记每一行。为了更容易,我将跳过当前行值的乘法。因此,目标是如果任何值高于当前值则将行标记为 True,如果没有值则标记为 False(关于接下来的 3 行)
idx
value
label
0
2.00
true
1
2.01
true
2
1.98
false
3
2.01
NaN
4
2.02
NaN
在你的情况下检查 rolling
df['new'] = df.value.shift(-1).iloc[::-1].rolling(3).max().ge(df.value)
Out[56]:
0 True
1 True
2 False
3 False
4 False
Name: value, dtype: bool
我在数据框中标记行时遇到问题。这个想法是我想知道当前(迭代)值乘以小浮点数是否高于数据帧中接下来的 60 行中的任何一行。
我已经找到了一个可行的解决方案,但不幸的是速度很慢。我尝试使用 .apply 和列表理解来实现,但失败了。
代码如下所示:
for i in range(df.shape[0] - 1):
label.append((df.iloc[i+1:window+i]['value'] > df.iloc[i]['value'] * small_threshold).any())
所以基本上可以说我有这个 df
idx | value |
---|---|
0 | 2.00 |
1 | 2.01 |
2 | 1.98 |
3 | 2.01 |
4 | 2.02 |
我想针对接下来的 3 行标记每一行。为了更容易,我将跳过当前行值的乘法。因此,目标是如果任何值高于当前值则将行标记为 True,如果没有值则标记为 False(关于接下来的 3 行)
idx | value | label |
---|---|---|
0 | 2.00 | true |
1 | 2.01 | true |
2 | 1.98 | false |
3 | 2.01 | NaN |
4 | 2.02 | NaN |
在你的情况下检查 rolling
df['new'] = df.value.shift(-1).iloc[::-1].rolling(3).max().ge(df.value)
Out[56]:
0 True
1 True
2 False
3 False
4 False
Name: value, dtype: bool