Маскировать все значения, которые встречаются до максимума в панде DataFrame - PullRequest
0 голосов
/ 28 января 2019

Я хочу взять результат из 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

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Можно проверить, где совокупный максимум совпадает с максимальным:

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
0 голосов
/ 29 января 2019

Простой, но, вероятно, неэффективный метод:

for c in df.columns:
  df[c].loc[df[c].index[0]: df[c].idxmax()] = np.nan
0 голосов
/ 28 января 2019

Я бы использовал 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

Но, возможно, есть и другие способы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...