如何总结数据框中的每一列?

时间:2019-01-29 07:38:31

标签: python pandas dataframe sum

我有以下主题文档概率矩阵的数据框

    0             1         2             3         4       ...             77            78            79            80            81
1  0.0  9.941665e-23  0.001141  6.837607e-04  0.010396      ...       0.000071  6.475626e-10  1.641026e-02  2.494897e-08  2.017094e-02
2  1.0  2.735043e-03  0.004329  1.915713e-20  0.000202      ...       0.005399  1.367521e-02  1.816478e-12  1.641023e-02  1.366020e-10

其中具有值(0.0,1.0)的第0列分别表示主题1和2的索引。数据框具有81列和2行。我想总结所有列并获得另一个数据框。例如,对于第1列,所有列的输出均为sum(0.002735042735040934 + 1.7996105239810978e-15)。我用

col_list = list(df)
df = df[col_list].sum(axis=0)

但仅用于打印

1      0.0027350427350409341.7996105239810978e-15
2          0.0054700854694576.284676740939513e-13

这不是我要输出的输出。正确的方法是什么? 在按降序对所有列的每个值进行排序之后,我要以这种格式输出每个文档的主题排名。

   id      topic-rank
    1          1, 0
    2          1, 0
    3          0, 1
    4          0, 1
        ...
    80         0, 1
    81         1, 0

什么是合适的方法?

1 个答案:

答案 0 :(得分:4)

问题在于值是字符串,因此需要首先将它们转换为float

s = df.astype(float).sum()
print (s)
1     0.002735
2     0.005470
80    0.016410
81    0.020171
dtype: float64

编辑:使用DataFrame.div进行除法:

df = df.astype(float)

df1 = df.div(df.sum())
print (df1)
              1             2        80            81
1  1.000000e+00  1.000000e+00  0.998241  4.151430e-10
2  6.579826e-13  1.148917e-10  0.001759  1.000000e+00