繁体   English   中英

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

[英]How to calculate Mean of specific values in each row of a data frame?

我有一个尺寸为 (19000x31) 的 dataframe。 我正在尝试计算每一行的平均值。 每行中的值范围从 0 到 255。但是,我只想为每行计算 0 到 100 之间的值的平均值,即不应考虑大于 100 的值进行平均值计算。 我用过 DataFrame.Replace 和 DataFrame。 这样做的意思。 但无法得到我需要的东西。 是否有任何 function 我可以直接用于执行此操作,否则是否可以用 NaN 替换值并计算平均值。 当我尝试更换时,我没有得到正确的更换。

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

由于您标记了 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 倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM