【问题标题】:Having Issues with pandas groupby.mean() not ignoring NaN as expected熊猫 groupby.mean() 的问题没有按预期忽略 NaN
【发布时间】:2021-11-16 22:18:39
【问题描述】:

我目前正在尝试在我的数据帧 (tdf) 中获取组的均值(),但我的数据集中混合了一些 NaN 值和填充值。示例如下所示

Test # a b
1 1 1
1 2 NaN
1 3 2
2 4 3

我的代码需要获取这个数据集,并创建一个包含集合的均值、标准差和 95% 区间的新数据集。

i = 0 
num_timeframes = 2 #writing this in for example sake
new_df = pd.DataFrame(columns = tdf.columns)
while i < num_timeframes:
  results = tdf.loc[tdf["Test #"] == i].groupby(["Test #"]).mean()
  new_df = pd.concat([new_df,results])
  results = tdf.loc[tdf["Test #"] == i].groupby(["Test #"]).std()
  new_df = pd.concat([new_df,results]) 
  results = 2*tdf.loc[tdf["Test #"] == i].groupby(["Test #"]).std()
  new_df = pd.concat([new_df,results])
  new_df['Test #'] = new_df['Test #'].fillna(i) #fill out test number values
  i+=1

为简单起见,我将在 while 循环的第一遍显示所需的输出,仅计算平均值。然而,这个问题会影响每一行。 Test # 1 均值的预期输出如下所示:

Test # a b
1 2 1.5

但是,包含任何 NaN 行的列将整个平均值计算为 NaN,从而产生如下所示的输出

Test # a b
1 2 NaN

我尝试传递skipna=True,但得到一个错误,指出mean 没有skipna 参数。我真的很茫然,因为我的理解是 df.mean() 默认忽略 NaN 行。我对 python 的经验有限,因此非常感谢任何帮助。

【问题讨论】:

    标签: python pandas std nan mean


    【解决方案1】:

    我最终通过完全删除 groupby 函数解决了这个问题(我正在查看它并意识到我没有理由在这里调用 groupby 除了受益于 groupby 保持我的列在正确的方向)。我想我会发布我的修复以防万一有人遇到这个问题。

    for i in range(num_timeframes):
      results = tdf.loc[tdf["Test #"] == i].mean()
      results = pd.concat([results, tdf.loc[tdf["Test #"] == i].std()], axis = 1)
      results = pd.concat([results, 2*tdf.loc[tdf["Test #"] == i].std()], axis = 1)
      results = results.transpose()
      results["Test #"] = i
      new_df = pd.concat([new_df,results])
      new_df.loc[new_df.shape[0]] = [None]*len(new_df.columns)
    

    我所要做的就是转置我的结果,因为 df.mean() 出于某种原因翻转了数据框,这可能是我首先尝试使用 groupby 的原因。

    【讨论】:

      【解决方案2】:

      使用以下

      DataFrame.mean( axis=None, skipna=True)
      

      【讨论】:

      • Error: mean() got an unexpected keyword argument 'axis' 出于某种原因,我无法传递与 mean() 关联的参数
      • 是否有可能有多个 mean() 方法并且它使用了错误的方法?我导入了 pandas、canterra 和数学(按此顺序)
      猜你喜欢
      • 2019-08-30
      • 2016-08-27
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2022-12-07
      • 2013-08-05
      • 2011-04-09
      相关资源
      最近更新 更多