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()
是产生局部最大值的原因。
在下面的数据框中,“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()
是产生局部最大值的原因。