使用python熊猫,我想转换以下数据(框架)...
A1 - A2 - A3
10 - 30 - 50
11 - 31 - 51
12 - 32 - 52
类似...
Ro - Co - Value
R1 - A1 - 10
R1 - A2 - 30
R1 - A3 - 50
R2 - A1 - 11
R2 - A2 - 31
R2 - A3 - 51
R3 - A1 - 12
R3 - A2 - 32
R3 - A3 - 52
换句话说,原始行应在单独的列中表示,原始列也应在单独的列中表示,并且所有组合的原始值应在单独的列中表示。
感谢您的帮助!
PS:很抱歉标题选择不佳。如果有任何改进的建议,请告诉我。
答案 0 :(得分:2)
使用.melt
:
df.reset_index().melt(id_vars='index')
index variable value
0 0 A1 10
1 1 A1 11
2 2 A1 12
3 0 A2 30
4 1 A2 31
5 2 A2 32
6 0 A3 50
7 1 A3 51
8 2 A3 52
答案 1 :(得分:2)
stack
+ rename_axis
:
u = df.stack().rename_axis(['Ro', 'Co']).rename('Value').reset_index()
u.assign(Ro=[f'L{r+1}' for r in u.Ro])
Ro Co Value
0 L1 A1 10
1 L1 A2 30
2 L1 A3 50
3 L2 A1 11
4 L2 A2 31
5 L2 A3 51
6 L3 A1 12
7 L3 A2 32
8 L3 A3 52
答案 2 :(得分:0)
# Creating the DataFrame first
import pandas as pd
df=pd.DataFrame({'A1':[10,11,12],'A2':[30,31,32],'A3':[50,51,52]})
df['Ro']=df.index
df['Ro'] = df['Ro'].map(lambda x: 'R'+str(x))
df
A1 A2 A3 Ro
0 10 30 50 R0
1 11 31 51 R1
2 12 32 52 R2
df = df.set_index(['Ro']).stack().reset_index().rename(columns={'level_1':'Co',0:'Value'})
df
Ro Co Value
0 R0 A1 10
1 R0 A2 30
2 R0 A3 50
3 R1 A1 11
4 R1 A2 31
5 R1 A3 51
6 R2 A1 12
7 R2 A2 32
8 R2 A3 52