Dataframe 列:找到局部最大值

Dataframe column: to find local maxima

在下面的数据框中,“CumRetperTrade”列是一个由几个用零分隔的垂直向量(=数字序列)组成的列。 (= 这些向量对应于“投资组合”列的非零元素)。 我想找到“CumRetperTrade”列中包含的每个非零向量的局部最大值
准确地说,我想将“CumRetperTrade”列(使用矢量化或其他方法)转换为“PeakCumRet”列(期望的结果),它为“CumRetperTrade”列中包含的每个向量提供其局部最大值的最大值。数值示例如下。提前致谢。

import numpy as np
import pandas as pd
df1 = pd.DataFrame({"Portfolio": [1, 1, 1, 0 , 0, 0, 1, 1, 1],
"CumRetperTrade": [3, 2, 1, 0 , 0, 0, 4, 2, 1],
"PeakCumRet": [3, 3, 3, 0 , 0, 0, 4, 4, 4]})
df1

Portfolio   CumRetperTrade  PeakCumRet
1           3               3
1           2               3
1           1               3
0           0               0
0           0               0
0           0               0
1           4               4
1           2               4
1           1               4

您可以使用:

df1['PeakCumRet'] = (df1.groupby(df1['Portfolio'].ne(df1['Portfolio'].shift()).cumsum())
                     ['CumRetperTrade'].transform('max')
                     )

输出:

   Portfolio  CumRetperTrade  PeakCumRet
0          1               3           3
1          1               2           3
2          1               1           3
3          0               0           0
4          0               0           0
5          0               0           0
6          1               4           4
7          1               2           4
8          1               1           4