Я хотел бы заменить все значения выше среднего значения столбца на медианное значение самого столбца.Улучшите код, чтобы заменить значения выше медианного по самому среднему значению в pandas DataFrame
Вот мой DataFrame:
m = pd.DataFrame({
'a': xrange(5),
'b': xrange(5, 10),
'c': xrange(10,15)})
print m
a b c
0 0 5 10
1 1 6 11
2 2 7 12
3 3 8 13
4 4 9 14
Вот мое решение:
for col in m.columns:
quart = m[col].median()
m[col] = [val if val < quart else quart for val in m[col]]
print m
a b c
0 0 5 10
1 1 6 11
2 2 7 12
3 2 7 12
4 2 7 12
Я не знаком с кадром данных, так что я был интересно, если это возможно сделать это в более " панды "или с помощью некоторой фантастической линейной алгебры.
Заранее благодарю вас за ответ.
Редактировать ответ:
Вот быстрый timeit для решений от hurrial и chrisb соответственно:
%timeit m.apply(lambda col: np.where(col.median() < col, col.median(), col))
1000 loops, best of 3: 1.36 ms per loop
%timeit np.minimum(m, m.median())
1000 loops, best of 3: 400 µs per loop
Решение с использованием np.minimum кажется быстрее.
Спасибо, что сегодня я научился 2 мощным вещам, np.where и np.minimum!