大熊猫是指具有条件的地方的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大熊猫是指具有条件的地方的值相关的知识,希望对你有一定的参考价值。

我想计算不包括值99的年龄平均值。在现实生活中,数据帧要大得多,我还有其他可能的变量。

有没有更有效的方法(更快或更优雅)呢?也许使用数据透视表或分组或函数?

data = {'age': [99,45,34,32,34,67,5,6,7,8,3,5]}
df = pd.DataFrame(data, columns = ['age'])

not99 = df['age'] != 99

mean_for_age = df.loc[not99, 'age'].mean()
答案

numpy解决方案更快 - 首先创建数组然后过滤:

arr = df['age'].values
not99 = arr != 99

mean_for_age = arr[not99].mean()

但如果需要一般解决方案可能选择另一列使用您的解决方案:

not99 = df['age'] != 99
mean_for_age = df.loc[not99, 'age'].mean()

mean_for_age = df.loc[not99, 'another col'].mean()

计时(取决于数据,最佳测试与实际数据):

data = {'age': [99,45,34,32,34,67,5,6,7,8,3,5]}
df = pd.DataFrame(data, columns = ['age'])

df = pd.concat([df] * 10000, ignore_index=True)


In [14]: %%timeit
    ...: arr = df['age'].values
    ...: not99 = arr != 99
    ...: 
    ...: mean_for_age = arr[not99].mean()
    ...: 
496 µs ± 36.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [15]: %%timeit
    ...: not99 = df['age'] != 99
    ...: mean_for_age = df.loc[not99, 'age'].mean()
    ...: 
1.82 ms ± 40.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [16]: %%timeit
    ...: df.query("age != 99")['age'].mean()
    ...: 
4.26 ms ± 40.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

以上是关于大熊猫是指具有条件的地方的值的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历熊猫表,按条件更改其他列的值

如何计算满足特定条件的熊猫 groupby 的值

熊猫数据框条件 .mean() 取决于特定列中的值

根据熊猫中多列的条件(最大值)替换列中的值

如何使用熊猫将多行组合成具有多条件的行[关闭]

如何使用熊猫对与给定条件匹配的列中的值求和?