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

时间:2017-08-30 15:21:22

标签: python-2.7 pandas dataframe

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

下面的代码忽略了(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

1 个答案:

答案 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