如何计算 pandas 数据帧的过滤行的平均值并将平均值附加到原始数据帧的所有列?



如何计算所有列的平均值,仅不等于零的行,并在底部附加一个新行,其中包含仅包含一行代码的平均值? 它不一定是一行,但我想知道为什么这不起作用?

下面的代码忽略了 (df.bar != 0) 段

df = df.append(df[(df.bar != 0)].mean(numeric_only=True), ignore_index=True)

示例 df:

foo     bar     total
0   foo1    bar1    293.09
1   foo2    0       0
2   foo3    bar3    342.3

当前结果:

0   foo     bar     total
1   foo1    bar1    293.09
2   foo2    0       0
3   foo3    bar3    342.3
4                   211.796

期望的结果:

0   foo     bar     total
1   foo1    bar1    293.09
2   foo2    0       0
3   foo3    bar3    342.3
4                   317.695

正如John Galt评论的那样需要'0',因为0是字符串:

df = df.append(df[(df.bar != '0')].mean(numeric_only=True), ignore_index=True)
print (df)
foo   bar    total
0  foo1  bar1  293.090
1  foo2     0    0.000
2  foo3  bar3  342.300
3   NaN   NaN  317.695

如果需要删除最后一行中的NaN,请仅使用带有参数fill_valuereindex

s = df[(df.bar != '0')].mean(numeric_only=True).reindex(df.columns, fill_value='')
df = df.append(s, ignore_index=True)
print (df)
foo   bar    total
0  foo1  bar1  293.090
1  foo2     0    0.000
2  foo3  bar3  342.300
3              317.695

另一种解决方案 - 放大设置:

df.loc[len(df.index)] = s
print (df)
foo   bar    total
0  foo1  bar1  293.090
1  foo2     0    0.000
2  foo3  bar3  342.300
3              317.695

最新更新