转置 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 数据框保留索引的主要内容,如果未能解决你的问题,请参考以下文章