pandas groupby.mean() 没有按预期忽略 NaN 的问题

Having Issues with pandas groupby.mean() not ignoring NaN as expected

我目前正在尝试获取我的数据帧 (tdf) 中一组的 mean(),但我的数据集中混合了一些 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 循环的第一遍中显示所需的输出,仅计算平均值。但是,该问题会影响每一行。测试 #1 的均值的预期输出如下所示:

Test # a b
1 2 1.5

但是,包含任何 NaN 行的列正在将整个平均值计算为 NaN,导致如下所示的输出

Test # a b
1 2 NaN

我尝试传递 skipna=True,但收到一条错误消息,指出 mean 没有 skipna 参数。我真的在这里不知所措,因为据我了解 df.mean() 默认情况下会忽略 NaN 行。我对 python 的经验有限,因此非常感谢任何帮助。

使用以下内容

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

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

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 的原因。