Python 如何使用索引对数据帧中的值进行排序?

Python 如何使用索引对数据帧中的值进行排序?,python,pandas,dataframe,ranking,Python,Pandas,Dataframe,Ranking,我有以下主题文档概率矩阵的数据框架,第一行是文本文件的名称 1 2 ... 80 81 0 778.txt 856.txt ... 831.txt

我有以下主题文档概率矩阵的数据框架,第一行是文本文件的名称

                       1                      2            ...                               80                      81
0                778.txt                856.txt           ...                          831.txt                 850.txt
1   0.002735042735042732  0.0054700854700846634           ...              0.01641025640567632  4.2490294446698094e-09
2  2.146512500161246e-28  8.006312700113502e-16           ...            4.580074538571013e-12     0.02017093592191074
其中,带有值(0.0,1.0)的列0分别表示主题1和主题2的索引。对每列进行排序后(decsending)

我得到了以下输出

     0             1         2             3         4       ...             77            78            79            80            81
1  1.0  2.735043e-03  0.004329  6.837607e-04  0.010396      ...       0.005399  1.367521e-02  1.641026e-02  1.641023e-02  2.017094e-02
2  0.0  9.941665e-23  0.001141  1.915713e-20  0.000202      ...       0.000071  6.475626e-10  1.816478e-12  2.494897e-08  1.366020e-10
我想显示每个文档的主题文档排名矩阵,例如

     id      topic-rank
    778        1, 0
    856        1, 0
    835        0, 1
    786        0, 1
        ...
    831        0, 1
    850        1, 0
对于id为1的文档,我分配了1,0,因为主题2的概率大于主题1,依此类推。 怎么做? 已编辑问题的示例数据这些只是dataframe的head()值

      id                                               text
0  15623  Y:\n1. Ran preliminary experiments to set para...
1  15625  Scrum Minutes- Hersheys\nPresent: Eyob, Masres...
2  15627  Present: Eyob, Masresha,  Zelalem\nhersheys:\n...
3  15628  **********************************************...
4  15629  Scrum Minutes- Hersheys\nPresent: Eyob, Masres...
用于具有DataFrame构造函数的位置:

#create index by first column and transpose
df2 = df.set_index(0).T

arr = df2.columns.values[(-df2.values).argsort()]
df2 = pd.DataFrame({'id': df2.index, 
                    'score1': arr[:, 0].astype(int),
                    'score2': arr[:, 1].astype(int)})
print (df2)
   id  score1  score2
0   1       1       0
1   2       1       0
2   3       0       1
3   4       0       1
4  77       1       0
5  78       1       0
6  79       0       1
7  80       1       0
8  81       0       1
编辑:

编辑1:

df2 = df.T.set_index(0).astype(float)
print (df2)
                    1             2
0                                  
778.txt  2.735043e-03  2.146513e-28
856.txt  5.470085e-03  8.006313e-16
831.txt  1.641026e-02  4.580075e-12
850.txt  4.249029e-09  2.017094e-02


arr = (-df2.values).argsort()

score = (pd.Series(arr[:, 0].astype(str)) + ', ' + 
         pd.Series(arr[:, 1].astype(str)))
df2 = pd.DataFrame({'id': df2.index.str.replace('\.txt',''), 
                    'score': score})
print (df2)
    id score
0  778  0, 1
1  856  0, 1
2  831  0, 1
3  850  1, 0

我能在一列(例如主题排名)中获得分数1和分数2属性的值吗?用逗号分隔?@SamuelMideksa-所以通过
df=pd.read\u csv(pplsa.PLSA\u参数\u PATH+'topic by doc matirx.csv',sep=',
)更改它-然后csv的第一行是数据框中的列,然后更改
df2=df.T.set\u索引(0).astype(float)
df2=df.T
@SamuelMideksa-所以使用
df.columns=df.columns.str.replace('\.txt','')
@Samuel Mideksa在我看来,最好是为每个列创建新的列,比如
df2=pd.DataFrame(arr,index=df2.index)
,但是如果真的需要连接所有值,那么就使用
df2=pd.DataFrame({'id':df2.index.str.replace('\.txt','','','score':pd.DataFrame(arr).astype(str.apply('','.join,axis=1)})
。我离线,只打电话,所以没有测试。好的,所以使用
df=pd.concat([df1,df2],axis=1)
df2 = df.set_index(0).T

arr = df2.columns.values[(-df2.values).argsort()]

score = (pd.Series(arr[:, 0].astype(int).astype(str)) + ', ' + 
         pd.Series(arr[:, 1].astype(int).astype(str)))
df2 = pd.DataFrame({'id': df2.index, 
                    'score': score})
print (df2)
   id score
0   1  1, 0
1   2  1, 0
2   3  0, 1
3   4  0, 1
4  77  1, 0
5  78  1, 0
6  79  0, 1
7  80  1, 0
8  81  0, 1
df2 = df.T.set_index(0).astype(float)
print (df2)
                    1             2
0                                  
778.txt  2.735043e-03  2.146513e-28
856.txt  5.470085e-03  8.006313e-16
831.txt  1.641026e-02  4.580075e-12
850.txt  4.249029e-09  2.017094e-02


arr = (-df2.values).argsort()

score = (pd.Series(arr[:, 0].astype(str)) + ', ' + 
         pd.Series(arr[:, 1].astype(str)))
df2 = pd.DataFrame({'id': df2.index.str.replace('\.txt',''), 
                    'score': score})
print (df2)
    id score
0  778  0, 1
1  856  0, 1
2  831  0, 1
3  850  1, 0