转置熊猫数据框以保留索引

时间:2020-02-18 19:55:12

标签: python pandas cluster-analysis

我在转换具有以下结构的Pandas DataFrame时遇到问题:

            0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16
foo         0  4  0  0  0  0  0  0  0  0  14   1   0   1   0   0   0
bar         0  6  0  0  4  0  5  0  0  0   0   0   0   0   1   0   0
lorem       1  3  0  0  0  1  0  0  2  0   3   0   1   2   1   1   0
ipsum       1  2  0  1  0  0  1  0  0  0   0   0   4   0   6   0   0
dolor       1  2  4  0  1  0  0  0  0  0   2   0   0   1   0   0   2
..

具有索引:

foo,bar,lorem,ipsum,dolor,...

这基本上是一个术语-文档矩阵,其中行是术语,而标题(0-16)是文档索引。 由于我的目的是对文档而不是术语进行聚类,因此我想转置数据框,并使用它来在文档之间进行余弦距离计算。 但是当我转置:

pd.transpose()

我得到:

   foo       bar    ...       pippo                     lorem
0    0         0    ...       0                         0
1    4         6    ...       0                         0
2    0         0    ...       0                         0
3    0         0    ...       0                         0
4    0         4    ...       0                         0
..
16   0         2    ...       0                         1

具有索引:

0 , 1 , 2 , 3 , ... , 15, 16

我想要什么? 我正在寻找一种方法来使此操作保留数据帧索引。基本上,新df的第一行应该是索引。

谢谢

2 个答案:

答案 0 :(得分:0)

我们可以使用一系列的卸货

df2 = df.unstack().to_frame().unstack(1).droplevel(0,axis=1)

print(df2)


   foo bar lorem ipsum dolor
0    0   0     1     1     1
1    4   6     3     2     2
2    0   0     0     0     4
3    0   0     0     1     0
4    0   4     0     0     1
5    0   0     1     0     0
6    0   5     0     1     0
7    0   0     0     0     0
8    0   0     2     0     0
9    0   0     0     0     0
10  14   0     3     0     2
11   1   0     0     0     0
12   0   0     1     4     0
13   1   0     2     0     1
14   0   1     1     6     0
15   0   0     1     0     0
16   0   0     0     0     2

答案 1 :(得分:0)

假设数据是方阵(n x n),并且如果我理解正确的话

 df = pd.DataFrame([[0, 4,0], [0,6,0], [1,3,0]], 
                   index =['foo', 'bar', 'lorem'], 
                   columns=[0, 1, 2]
                   )
 df_T = pd.DataFrame(df.values.T, index=df.index, columns=df.columns)