我想从pd.DataFrame.idxmax
中获取结果,并使用它来更改具有最大值的索引之前的值。
如果我有df
:
Mule Creek Saddle Mtn. Calvert Creek
Date
2011-05-01 23.400000 35.599998 8.6
2011-05-02 23.400000 35.599998 8.0
2011-05-03 23.400000 35.700001 7.6
2011-05-04 23.400000 50.000000 7.1
2011-05-05 23.100000 35.799999 6.4
2011-05-06 23.000000 35.799999 5.7
2011-05-07 40.000000 35.900002 4.7
2011-05-08 23.100000 36.500000 12.0
2011-05-09 23.299999 37.500000 4.4
2011-05-10 23.200001 37.500000 3.6
我发现每列的最大值出现在哪里:
max = df.idxmax()
我想在确定的最大值max
全部np.nan
所需结果:
Mule Creek Saddle Mtn. Calvert Creek
Date
2011-05-01 NaN NaN NaN
2011-05-02 NaN NaN NaN
2011-05-03 NaN NaN NaN
2011-05-04 NaN 50.000000 NaN
2011-05-05 NaN 35.799999 NaN
2011-05-06 NaN 35.799999 NaN
2011-05-07 40.000000 35.900002 NaN
2011-05-08 23.100000 36.500000 12.0
2011-05-09 23.299999 37.500000 4.4
2011-05-10 23.200001 37.500000 3.6
答案 0 :(得分:5)
可以检查累积最大值与最大值相同的地方:
df.where(df.cummax() == df.max())
Mule Creek Saddle Mtn. Calvert Creek
Date
2011-05-01 NaN NaN NaN
2011-05-02 NaN NaN NaN
2011-05-03 NaN NaN NaN
2011-05-04 NaN 50.000000 NaN
2011-05-05 NaN 35.799999 NaN
2011-05-06 NaN 35.799999 NaN
2011-05-07 40.000000 35.900002 NaN
2011-05-08 23.100000 36.500000 12.0
2011-05-09 23.299999 37.500000 4.4
2011-05-10 23.200001 37.500000 3.6
答案 1 :(得分:4)
我将使用max
和cumprod
。
df[(df < df.max()).cumprod().ne(1)]
Mule Creek Saddle Mtn. Calvert Creek
Date
2011-05-01 NaN NaN NaN
2011-05-02 NaN NaN NaN
2011-05-03 NaN NaN NaN
2011-05-04 NaN 50.000000 NaN
2011-05-05 NaN 35.799999 NaN
2011-05-06 NaN 35.799999 NaN
2011-05-07 40.000000 35.900002 NaN
2011-05-08 23.100000 36.500000 12.0
2011-05-09 23.299999 37.500000 4.4
2011-05-10 23.200001 37.500000 3.6
但是也许还有其他方法。
答案 2 :(得分:1)
简单但可能效率不高的方法:
for c in df.columns:
df[c].loc[df[c].index[0]: df[c].idxmax()] = np.nan