首页 > 解决方案 > 如何从 Pandas 记录的前 N ​​行中获取最大值?

问题描述

我有以下熊猫数据框:

date          value
2021-01-01    10
2021-01-02    5
2021-01-03    7
2021-01-04    1
2021-01-05    12
2021-01-06    8
2021-01-07    9
2021-01-08    8
2021-01-09    4
2021-01-10    3

我需要从前 N-1 行(计算当前记录)中获取最大值并进行操作。例如:

对于 N=3 并且操作 = current_row / MAX (previous_N-1_rows_and_current),结果应该是:

date          value    Operation
2021-01-01    10       10/10
2021-01-02    5        5/10
2021-01-03    7        7/10
2021-01-04    1        1/7
2021-01-05    12       12/12
2021-01-06    8        8/12
2021-01-07    9        9/12
2021-01-08    8        8/9
2021-01-09    4        4/9
2021-01-10    3        3/8

如果可能的话,本着 Pythonic 方式的精神。

谢谢并恭祝安康。

标签: python-3.xpandasdataframe

解决方案


我们可以计算列rolling上的最大值,value然后将value列除以这个滚动最大值以获得结果

df['op'] = df['value'] / df.rolling(3, min_periods=1)['value'].max()

         date  value        op
0  2021-01-01     10  1.000000
1  2021-01-02      5  0.500000
2  2021-01-03      7  0.700000
3  2021-01-04      1  0.142857
4  2021-01-05     12  1.000000
5  2021-01-06      8  0.666667
6  2021-01-07      9  0.750000
7  2021-01-08      8  0.888889
8  2021-01-09      4  0.444444
9  2021-01-10      3  0.375000

推荐阅读