有谁知道如何使用原始行和列值转置pandas数据帧?我使用.iterrows()遍历每一行和每列,但我相信有更好的方法可以做到这一点。也许使用枢轴?谢谢!
DF看起来像
a b c
0 11 12 13
1 21 22 23
2 31 32 33
我想要新的DF
row col Val
0 0 a 11
1 0 b 12
2 0 c 13
3 1 a 21
4 1 b 22
5 1 c 23
6 2 a 31
7 2 b 32
8 2 c 33
答案 0 :(得分:4)
以下是使用stack()
的一种方式。
res = df.stack().reset_index()
res.columns = 'row col Val'.split()
res
row col Val
0 0 a 11
1 0 b 12
2 0 c 13
3 1 a 21
4 1 b 22
5 1 c 23
6 2 a 31
7 2 b 32
8 2 c 33
答案 1 :(得分:1)
您可以使用pandas.melt
:
>>> d
a b c
0 11 12 13
1 21 22 23
2 31 32 33
>>> pandas.melt(d.reset_index(), id_vars='index')
index variable value
0 0 a 11
1 1 a 21
2 2 a 31
3 0 b 12
4 1 b 22
5 2 b 32
6 0 c 13
7 1 c 23
8 2 c 33
值的顺序有点不同,但您可以按照您喜欢的任何列对其进行排序,以便将内容输入到您想要的顺序。
答案 2 :(得分:0)
import pandas as pd
df = pd.DataFrame({'A': {0: 11, 1: 21, 2: 31},
'B': {0: 12, 1: 22, 2: 23},
'C': {0: 31, 1: 32, 2: 33}})
pd.melt(df, value_vars=['A','B','C'])
variable value
0 A 11
1 A 21
2 A 31
3 B 12
4 B 22
5 B 23
6 C 31
7 C 32
8 C 33