使用带有列数的Pandas Dataframe计数或求和

时间:2016-11-28 20:03:02

标签: python-3.x pandas dataframe

我试图找到一种方法来查找数据帧的行数。

这是我的df

 index col1  col2 col3 col4 col5 col6 col7 col8
  0     1     0    2    3     1    0   0    0
  1     0     0    0    1     2    0   2    0
  2     3     0    0    0     1    0   0    1
  3     1     0    0    0     1    1   1    0
  4     1     0    2    3     1    0   0    0
  5     3     0    0    0     1    0   0    1

这里我想追加另一行来计算我的列数,例如下面的

index col1  col2 col3 col4 col5 col6 col7 col8
  0     1     0    2    3     1    0   0    0
  1     0     0    0    1     2    0   2    0
  2     3     0    0    0     1    0   0    1
  3     1     0    0    0     1    1   1    0
  4     1     0    2    3     1    0   0    0
  5     3     0    0    0     1    0   0    1
-----------------------------------------------
Total   5     0    2    3     6    1   2    2

1 个答案:

答案 0 :(得分:4)

您可以使用通过与boolean mask进行比较而创建的0 sum。输出按loc分配到DataFrame的最后一行:

print (df != 0)
        col1   col2   col3   col4  col5   col6   col7   col8
index                                                       
0       True  False   True   True  True  False  False  False
1      False  False  False   True  True  False   True  False
2       True  False  False  False  True  False  False   True
3       True  False  False  False  True   True   True  False
4       True  False   True   True  True  False  False  False
5       True  False  False  False  True  False  False   True

df.loc['total'] = (df != 0).sum()
print (df)
       col1  col2  col3  col4  col5  col6  col7  col8
index                                                
0         1     0     2     3     1     0     0     0
1         0     0     0     1     2     0     2     0
2         3     0     0     0     1     0     0     1
3         1     0     0     0     1     1     1     0
4         1     0     2     3     1     0     0     0
5         3     0     0     0     1     0     0     1
total     5     0     2     3     6     1     2     2

DataFrame.ne类似的解决方案:

df.loc['total'] = df.ne(0).sum()
print (df)
       col1  col2  col3  col4  col5  col6  col7  col8
index                                                
0         1     0     2     3     1     0     0     0
1         0     0     0     1     2     0     2     0
2         3     0     0     0     1     0     0     1
3         1     0     0     0     1     1     1     0
4         1     0     2     3     1     0     0     0
5         3     0     0     0     1     0     0     1
total     5     0     2     3     6     1     2     2