我有以下主题文档概率矩阵的数据框
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
什么是合适的方法?
答案 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