如何根据另一列滚动函数的结果计算 pandas DataFrame 列的值

How to calculate the values of a pandas DataFrame column depending on the results of a rolling function from another column


一个非常简单的例子,仅供理解。

目标是根据另一列滚动函数的结果计算 pandas DataFrame 列的值。

我有以下数据框:

import numpy as np
import pandas as pd

s = pd.Series([1,2,3,2,1,2,3,2,1])    
df = pd.DataFrame({'DATA':s, 'POINTS':0})

df

注意:我什至不知道如何在 Whosebug 编辑中格式化 Jupyter Notebook 结果 window,所以我复制并粘贴图像,请原谅。

DATA栏显示观察到的数据; POINTS 列初始化为 0,用于收集应用于 DATA 列的 "rolling" 函数的输出,如下所述。

设置一个window=4

nwin = 4

仅举个例子,"rolling"函数计算最大值

现在让我用一张图来说明我需要什么。

对于每次迭代,滚动函数计算window中数据的最大值;然后 max DATA 相同索引处的 POINT 增加 1.

最后的结果是:

你能帮我 python 代码吗?

非常感谢您的帮助。
预先感谢您的宝贵时间,
吉尔伯托

P.S。您还可以建议如何将 Jupyter Notebook 格式的单元格复制并粘贴到 Whosebug 编辑 window?谢谢。

IIUC @IanS 的解释(再次感谢!),你可以做到

In [75]: np.array([df.DATA.rolling(4).max().shift(-i) == df.DATA for i in range(4)]).T.sum(axis=1)
Out[75]: array([0, 0, 3, 0, 0, 0, 3, 0, 0])

更新专栏:

In [78]: df = pd.DataFrame({'DATA':s, 'POINTS':0})

In [79]: df.POINTS += np.array([df.DATA.rolling(4).max().shift(-i) == df.DATA for i in range(4)]).T.sum(axis=1)

In [80]: df
Out[80]: 
   DATA  POINTS
0     1       0
1     2       0
2     3       3
3     2       0
4     1       0
5     2       0
6     3       3
7     2       0
8     1       0
import pandas as pd

s = pd.Series([1,2,3,2,1,2,3,2,1])    
df = pd.DataFrame({'DATA':s, 'POINTS':0})

df.POINTS=df.DATA.rolling(4).max().shift(-1)
df.POINTS=(df.POINTS*(df.POINTS==df.DATA)).fillna(0)