当前位置: 首页 > 知识库问答 >
问题:

数据帧列平均值上的布尔运算-这必须很简单

邹慈
2023-03-14

我至少有一个数据帧:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[1,5,3],
                  'B': [4,2,6]})

df['avg'] = df.mean(axis=1)
df[df<df['avg']]

我想保留数据框中低于df['avg'列中平均值的所有值。当我执行以下操作时,返回所有的NAN

df[df<df['avg']]

如果我设置一个for循环,我可以得到我想要的布尔值。

col_names = ['A', 'B']
for colname in col_names:
    df[colname] = df[colname]<df['avg']

我要找的东西是这样的:

df_desired = pd.DataFrame({
    'A':[1,np.nan,3],
    'B':[np.nan,2,np.nan],
    'avg' :[2.5, 3.5, 4.5]
})

我该怎么做呢?一定有蟒蛇的方法来做到这一点。

共有2个答案

经伟
2023-03-14

我认为这比公认的解决方案更为惯用和清晰:

import numpy as np
import pandas as pd

df = pd.DataFrame({'A': [1, 5, 3],
                   'B': [4, 2, 6]})

print(df)

df['avg'] = df.mean(axis=1)

print(df)

df[df[['A', 'B']].ge(df['avg'], axis=0)] = np.NaN

print(df)

输出:

   A  B
0  1  4
1  5  2
2  3  6
   A  B  avg
0  1  4  2.5
1  5  2  3.5
2  3  6  4.5
     A    B  avg
0  1.0  NaN  2.5
1  NaN  2.0  3.5
2  3.0  NaN  4.5

说到被接受的解决方案,不再建议使用。值来将熊猫数据帧或系列转换为NumPy数组。幸运的是,我们实际上不需要在这里使用它:

df.mask(df > df['avg'][:, np.newaxis])
谭敏学
2023-03-14

您可以在这里使用。我们可以使用Numpy的广播来生成一个高于给定平均值的布尔值数组:

>>> df.mask(df.values > df['avg'].values[:,None])
     A    B  avg
0  1.0  NaN  2.5
1  NaN  2.0  3.5
2  3.0  NaN  4.5

 类似资料:
  • 我试图找出我的DataFrame列中是否存在特定的列,但我有一些问题。 我所做的:使用布尔运算“notin”(我尝试了any()、all()、“in”)来查找特定的列标题,但它似乎工作不正常! 假设我的DataFrame列标题是: 我想看看是否所有的‘M1’、‘M2’、…'M20'和TM1'在那里。如果一个或多个代码丢失,则该代码将不起作用。 所以我说: 现在,假设df具有所有询问列标题,if语句

  • 我有一个由66个变量的10299个观测值组成的数据框。其中一些变量共享一个通用的列名,我想计算每个观测值的这些变量的平均值。 具有以下矩阵,列名: 我想得到: 我尝试了循环,命令,但没有得到所需的结果。 抱歉,如果这个问题看起来太基本了,我已经在谷歌上查过可能的解决方案,但没有找到任何解决方案。

  • 问题内容: 我正在尝试使用下面的代码来计算用户输入的一组值的平均值,并将其显示在中,但它无法正常工作。假设用户输入7、4和5,该程序在应显示5.3时显示平均值。 代码有什么问题? 问题答案: 当您拥有增强的for循环时,为什么还要对索引使用笨拙的for循环?

  • 我们如何使用scala使用OR操作将布尔列折叠成一行? 第1部分: 期望输出 我能想到的一个解决方案是按第一列条目对它们进行分组,filter true 这个解决方案相当混乱。此外,不知道这是否适用于所有边缘情况。有什么聪明的方法可以做到这一点吗? 编辑:给定的答案适用于上述给定的场景,但不适用于此场景。有什么方法可以实现所需的输出? 第2部分: 期望输出 我试图通过col1和col2分组,然后用

  • 本文向大家介绍awk 根据表格数据计算列中的平均值,包括了awk 根据表格数据计算列中的平均值的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个;用作列定界符的文件。我们使用以下程序在第二列中计算值的平均值,提供的输入是学生组的成绩列表: 该程序的输出为2.125。 请记住,它NR保存了要处理的行数,END因此在块中它保存了文件中的总行数。 请记住,在许多应用程序(监视,统计)中,中位数是更

  • 问题内容: 我有一个表,其中包含一列要从中提取信息的JSON数据。具体来说,我只想获取平均值。 我所拥有的例子: 我想要的例子: 关于如何使该查询正常工作的任何建议? 问题答案: 您的json数组被弄乱了,就像@poszcommented一样。必须是: 您的查询也以多种方式扭曲。在第 9.3 页中将像这样工作: SQL提琴。 在即将到来的pg 9.4中, 我们可以使用新的来简化操作(转换中也不太容