如何计算所有列的平均值,仅不等于零的行,并在底部附加一个新行,其中包含仅包含一行代码的平均值? 它不一定是一行,但我想知道为什么这不起作用?
下面的代码忽略了 (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_value
的reindex
:
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