熊猫:重塑的行和列的信息到单独的列

问题描述 投票:2回答:3

使用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:很抱歉的穷人标题的选择。如果有改进建议,请让我知道。

python pandas
3个回答
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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.