如何将列更改为行

时间:2019-07-06 21:26:13

标签: python pandas rows

我有这个数据框:

Name  type1  type2  type3  ...  typeN  color

John  8.7  0  NA  ...  56  blue

Andy  45  34  9.7  ...  NA  yellow

我需要将其更改为:

color  typeName  Name  value
blue  type1  John  8.7
blue  type2  John  0
blue  type3  John  NA
.
.
.
blue  typeN  John  56
yellow  type1  Andy  45
yellow  type2  Andy  34
yellow  type3  Andy  9.7
.
.
.
yellow  typeN  Andy  NA

我对如何做到这一点有些困惑,请帮忙吗?

2 个答案:

答案 0 :(得分:3)

这与数据重塑有关。请参阅下面的使用堆栈(替代熔化)的工作流程,

样本数据

df=pd.DataFrame({'Name':['John','Andy'], 'type1':[8.7,45],'type2':[0,34], 'color':['blue','yellow']})
result = df.set_index(['Name','color'])
           .rename_axis('typeName',axis=1)
           .stack(dropna=False)
           .reset_index(name='value')

输出

    Name    color   typeName    value
0   John    blue    type1   8.7
1   John    blue    type2   0.0
2   Andy    yellow  type1   45.0
3   Andy    yellow  type2   34.0

答案 1 :(得分:2)

pd.melt(df, id_vars=['Name', 'color'], var_name='typeName')

    Name    color   typeName    value
0   John    blue    type1       8.7
1   Andy    yellow  type1       45.0
2   John    blue    type2       0.0
3   Andy    yellow  type2       34.0
4   John    blue    type3       NaN
5   Andy    yellow  type3       9.7
6   John    blue    typeN       56.0
7   Andy    yellow  typeN       NaN