如何将列更改为行[重复]

Posted

技术标签:

【中文标题】如何将列更改为行[重复]【英文标题】:How to change the columns into rows [duplicate] 【发布时间】:2019-11-16 22:58:01 【问题描述】:

我有这个数据框:

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

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

【问题讨论】:

你想融化它。 pandas.pydata.org/pandas-docs/stable/reference/api/… 【参考方案1】:

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

样本数据

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

【讨论】:

【参考方案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


【讨论】:

以上是关于如何将列更改为行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

访问 SQL - 将列更改为自动编号?

将列更改为可为空的查询不起作用[重复]

Postgresql以通用方式将列更改为行

如何在AngularJS网格中有条件地将列更改为文本框?

使用条件将列更改为单独的数据框

如何更改数据库上的数据类型 [重复]