如何计算所有列的平均值,只计算不等于零的行,并在底部附加一个新行,平均值只有一行代码?它不一定是一行,但我想知道为什么这不起作用?
下面的代码忽略了(df.bar!= 0)篇
#container {
min-height: 100px;
max-height: 300px;
border: solid 1px black;
width: 200px;
padding: 0 5px;
}
#fixed-part {
width: 100%;
height: 60px;
border: solid 1px pink;
}
#dynamic-part {
width: 100%;
max-height: calc(100% - 60px);
border: solid 1px blue;
}
示例df:
df = df.append(df[(df.bar != 0)].mean(numeric_only=True), ignore_index=True)
当前结果:
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 :(得分:4)
由于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
的{{3}}:
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
另一种解决方案 - reindex
:
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