Pandas 数据帧与原始行和列值的转置
Pandas dataframe transpose with original row and column values
有谁知道如何用原始行值和列值转置 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
这是使用 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
您可以使用 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
值的顺序略有不同,但您可以按您喜欢的任何列对其进行排序,以按照您想要的顺序排列。
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
有谁知道如何用原始行值和列值转置 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
这是使用 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
您可以使用 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
值的顺序略有不同,但您可以按您喜欢的任何列对其进行排序,以按照您想要的顺序排列。
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