Как рассчитать среднее значение c значений в каждой строке кадра данных? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть фрейм данных размером (19000x31). Я пытаюсь вычислить среднее значение каждой строки. Значения в каждой строке находятся в диапазоне от 0 до 255. Однако я хочу вычислить среднее значение для значений от 0 до 100 только для каждой строки, т. Е. Значения, превышающие 100, не следует рассматривать для расчета среднего. Я использовал DataFrame.Replace и DataFrame. Зло для этого. Но не могу получить то, что мне нужно. Есть ли какая-либо функция, которую я могу использовать для этого напрямую, иначе можно ли заменить значения на NaN и вычислить среднее значение. Я не получаю правильную замену, когда пытаюсь заменить.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Поскольку вы отметили numpy:

import numpy as np

# convert from dataframe to numpy array
a = df.to_numpy()

# create mask of "interest"
mask = np.logical_and(a>=0, a<=100)

# Compute row mean
(a*mask).sum(axis=1)/mask.sum(axis=1)

Давайте сравним numpy vs pandas производительности:

import pandas as pd
import numpy as np

# create fake dataframe
df = pd.DataFrame(np.random.randint(0, 255, (19000, 31)))

def np_masked_row_mean(df, lower, upper):

    # convert from dataframe to numpy array
    a = df.to_numpy()

    # create mask of "interest"
    mask = np.logical_and(a>=lower, a<=upper)

    # Compute row mean
    return (a*mask).sum(axis=1)/mask.sum(axis=1)

%timeit df[(df >= 0) & (df < 100)].mean(axis=1)
131 ms ± 38.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit np_masked_row_mean(df, 0, 100)
8.06 ms ± 385 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

, что делает реализацию numpy в 15-16 раз быстрее .

0 голосов
/ 08 мая 2020
df[(df >= 0) & (df < 100)].mean(axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...