Pandas数据框:查找当前值是否大于最后10行的值

5jvtdoz2  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(137)

考虑下面的dataFrame。我想计算价格列的当前值是否大于最后10个值。我想使用shift,但不确定如何用于最后10行。

price
220 3.337
221 3.320
222 3.290
223 3.291
224 3.312
225 3.255
226 3.216
227 3.245
228 3.275
229 3.282
230 3.370
231 3.396
232 3.375
233 3.369
234 3.335
235 3.344
236 3.365
237 3.373
238 3.414
239 3.378

输出 Dataframe :

price  isGreater
220 3.337      NaN
221 3.320      NaN
222 3.290      NaN
223 3.291      NaN
224 3.312      NaN
225 3.255      NaN
226 3.216      NaN
227 3.245      NaN
228 3.275      NaN
229 3.282      NaN
230 3.370      1.0
231 3.396      1.0
232 3.375      NaN
233 3.369      NaN
234 3.335      NaN
235 3.344      NaN
236 3.365      NaN
237 3.373      NaN
238 3.414      1.0
239 3.378      NaN
bq8i3lrv

bq8i3lrv1#

你可以使用rolling + max来得到最后10行的最大值,如果大于它,那么它就大于或等于all(包括self,因此是+1):

df['isGreater'] = df['price'].ge(df['price'].rolling(10+1).max())

注意:从技术上讲,如果你真的只想比较前面的行,而不是自己(例如使用严格比较),你需要移位:

df['isGreater'] = df['price'].gt(df['price'].shift().rolling(10).max())

输出:

price  isGreater
220  3.337      False
221  3.320      False
222  3.290      False
223  3.291      False
224  3.312      False
225  3.255      False
226  3.216      False
227  3.245      False
228  3.275      False
229  3.282      False
230  3.370       True
231  3.396       True
232  3.375      False
233  3.369      False
234  3.335      False
235  3.344      False
236  3.365      False
237  3.373      False
238  3.414       True
239  3.378      False
r7knjye2

r7knjye22#

def function1(ss:pd.Series):
    return ss.max()==ss.iloc[-1]

df1.rolling(11).apply(function1).where(lambda dd:dd.price.eq(1))

出局

price
220    NaN
221    NaN
222    NaN
223    NaN
224    NaN
225    NaN
226    NaN
227    NaN
228    NaN
229    NaN
230    1.0
231    1.0
232    NaN
233    NaN

相关问题