Поскольку вы отметили 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 раз быстрее .