Dataframe 列:查找(累积)局部最大值

Dataframe column: to find (cumulative) local maxima

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

的后续(其中 'Portfolio' = 1)子集
import numpy as np
import pandas as pd
df1 = pd.DataFrame({"Portfolio": [1, 1, 1, 1, 0 , 0, 0, 1, 1, 1],
"CumRetperTrade": [2, 3, 2, 1, 0 , 0, 0, 4, 2, 1],
"PeakCumRet": [2, 3, 3, 3, 0 , 0, 0, 4, 4, 4]})
df1

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


PPS 我之前已经问过类似的问题 () 并且得到了我问题的正确答案,但是在我的问题中我没有明确提到累积局部最大值的要求

你只需要对之前的回答稍作修改:

df1["PeakCumRet"] = (
    df1.groupby(df1["Portfolio"].diff().ne(0).cumsum())
    ["CumRetperTrade"].expanding().max()
    .droplevel(0)
)

expanding().max() 是产生局部最大值的原因。