如何计算数据帧每一行中特定值的均值?

时间:2020-05-08 04:52:34

标签: python python-3.x numpy dataframe

我有一个大小为(19000x31)的数据框。我正在尝试计算每一行的均值。每行中的值范围从0到255。但是,我只想为每行在0到100之间的值计算平均值,即,不应考虑大于100的值进行平均值计算。我已经使用了DataFrame.Replace和DataFrame。这样做的意思。但是无法得到我所需要的。有什么我可以直接使用的函数,否则可以用NaN替换值并计算平均值。尝试更换时,我没有得到正确的更换。

2 个答案:

答案 0 :(得分:0)

df[(df >= 0) & (df < 100)].mean(axis=1)

答案 1 :(得分:0)

自从您标记了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和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倍。