数据帧中接下来x行的频率



我需要弄清楚如何计算一列中低于该值的值在另一列中接下来的x行中出现的频率。

粘贴一些数据应该会让这一点更清楚:

DATE    Last Price    B50
ID            
SPX Index   2020-04-03  2488.65 1244.325
SPX Index   2020-04-06  2663.68 1331.840
SPX Index   2020-04-07  2659.41 1329.705
SPX Index   2020-04-08  2749.98 1374.990
SPX Index   2020-04-09  2789.82 1394.910
SPX Index   2020-04-13  2761.63 1380.815
SPX Index   2020-04-14  2846.06 1423.030
SPX Index   2020-04-15  2783.36 1391.680
SPX Index   2020-04-16  2799.55 1399.775
SPX Index   2020-04-17  2874.56 1437.280
SPX Index   2020-04-20  2823.16 1411.580
SPX Index   2020-04-21  2736.56 1368.280
SPX Index   2020-04-22  2799.31 1399.655
SPX Index   2020-04-23  2797.80 1398.900
SPX Index   2020-04-24  2836.74 1418.370
SPX Index   2020-04-27  2878.48 1439.240
SPX Index   2020-04-28  2863.39 1431.695
SPX Index   2020-04-29  2939.51 1469.755
SPX Index   2020-04-30  2912.43 1456.215
SPX Index   2020-05-01  2830.71 1415.355
SPX Index   2020-05-04  2842.74 1421.370
SPX Index   2020-05-05  2868.44 1434.220
SPX Index   2020-05-06  2848.42 1424.210
SPX Index   2020-05-07  2881.19 1440.595
SPX Index   2020-05-08  2929.80 1464.900
SPX Index   2020-05-11  2930.32 1465.160
SPX Index   2020-05-12  2870.12 1435.060
SPX Index   2020-05-13  2820.00 1410.000
SPX Index   2020-05-14  2852.50 1426.250
SPX Index   2020-05-15  2863.70 1431.850

所以我希望能够输入天数(或者行数,如果你愿意的话(。在本例中使用20。然后,我需要能够计算在接下来的20行中,"最后价格"中的值有多少次低于"B50"列中的第一个值(1244.325(;计数";作为新列"计数B50"中的值,该值将在日期行2020-04-03上。

然后在下一行(日期行2020-06-04(,我会计算在接下来的20行中,"最后价格"值低于"B50"中第二个值(1331.84(的次数,并将其记录在日期行2020:06-04的"计数B50"列中…依此类推

您可以使用DataFrame方法rolling。既然你想要一个窗口;展望未来";对于接下来的N行(加上实际的一行(,您可以执行:

indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=N+1)
df['Count_B50'] = (df['Last_Price'].rolling(indexer, min_periods=1)
.apply(lambda window: (window <
df['B50'].iloc[window.index.min()]
).sum()))

如果您不想在计算中包括实际的行,您可以在rolling的调用中添加关键字参数closed="right"

无论哪种方式,对于测试数据,输出如下(对于前五行(:

DATE  Last_Price       B50  Count_B50
2020-04-03     2488.65  1244.325        0.0
2020-04-06     2663.68  1331.840        0.0
2020-04-07     2659.41  1329.705        0.0
2020-04-08     2749.98  1374.990        0.0
2020-04-09     2789.82  1394.910        0.0

如果您有任何进一步的问题,请告诉我们!

最新更新