как условно удалить строки из расширяющегося окна панды

#python #pandas

Вопрос:

У меня есть ряд, в котором я хочу взять совокупную медиану всех ненулевых значений, в результате чего получится ряд той же длины, что и оригинал.

my_series.expanding().median() дает мне ряд той же длины, my_series который близок к тому, что я хочу, но прежде чем я возьму медиану каждого окна, я хочу удалить из окна строки, равные нулю, или вырезать ненулевые значения, или что-то еще… все, что работает лучше всего.

 a = [0, 1, 2, 0, 100, 1000] my_series = pd.Series(a)  my_series.expanding().median()  # returns:  0 0.0 1 0.5 2 1.0 3 0.5 4 1.0 5 1.5 dtype: float64  # desired output: # the median is only computed on values in each window that are greater than zero  0 nan 1 1.0 2 1.5 3 1.5 4 2.0 5 51.0 dtype: float64  

Ответ №1:

Вы можете заменить значения 0 на nan при вычислении, поэтому они не будут использоваться в расчетах медианы.

 my_series.replace(0, np.nan).expanding().median()  

Выход:

 0 NaN 1 1.0 2 1.5 3 1.5 4 2.0 5 51.0 dtype: float64  

Комментарии:

1. Да, это делает это. Наверное, я думал, что нули нужно удалить после окна, но для этого нет причин