![](/img/trans.png)
[英]How do I transpose a pandas dataframe while preserving the index and rename keys
[英]Transpose Pandas dataframe preserving the index
转置具有以下结构的 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 的第一行应该是索引。
谢谢
我们可以使用一系列的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
假设数据是方阵(nxn),如果我正确理解问题
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.