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
在下面的数据框中,“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