转置 Pandas 数据框保留索引

Posted

技术标签:

【中文标题】转置 Pandas 数据框保留索引【英文标题】:Transpose Pandas dataframe preserving the index 【发布时间】:2020-06-02 22:09:23 【问题描述】:

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

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 富 0 4 0 0 0 0 0 0 0 0 14 1 0 1 0 0 0 酒吧 0 6 0 0 4 0 5 0 0 0 0 0 0 0 1 0 0 定理 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 悲痛 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的第一行应该是索引。

谢谢

【问题讨论】:

矩阵的形状是一样的吧? (例如 8x8)? 不,基本(第一个)矩阵通常是 N x M 和 N >> M。 【参考方案1】:

我们可以使用一系列的unstack

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

【讨论】:

【参考方案2】:

假设数据是方阵 (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)

【讨论】:

以上是关于转置 Pandas 数据框保留索引的主要内容,如果未能解决你的问题,请参考以下文章

pandas:如何将字典转换为转置数据框? [复制]

Pandas 在行上设置多索引,然后转置到列

在熊猫中分组,转置和附加?

Pandas行列转换的4大技巧

R语言数据转置

Pandas转置重置十进制舍入