【问题标题】:Pandas column values to columns?将列值转换为列?
【发布时间】:2014-10-08 11:21:57
【问题描述】:

我已经看到了一些关于将列/系列分解为 Pandas 数据框的多个列的主题的变体,但我一直在尝试做一些事情,但在现有方法上并没有真正成功。

给定一个像这样的 DataFrame:

    key       val
id
2   foo   oranges
2   bar   bananas
2   baz    apples
3   foo    grapes
3   bar     kiwis

我想将key 系列中的项目转换为列,以val 值作为值,如下所示:

        foo        bar        baz
id
2   oranges    bananas     apples
3    grapes      kiwis        NaN

我觉得这应该是相对简单的事情,但是随着卷积水平的增加,我已经为此苦苦挣扎了几个小时,但没有成功。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    有几种方法:

    使用.pivot_table:

    >>> df.pivot_table(values='val', index=df.index, columns='key', aggfunc='first')
    key      bar     baz      foo
    id                           
    2    bananas  apples  oranges
    3      kiwis     NaN   grapes
    

    使用.pivot:

    >>> df.pivot(index=df.index, columns='key')['val']
    key      bar     baz      foo
    id                           
    2    bananas  apples  oranges
    3      kiwis     NaN   grapes
    

    使用.groupby,后跟.unstack

    >>> df.reset_index().groupby(['id', 'key'])['val'].aggregate('first').unstack()
    key      bar     baz      foo
    id                           
    2    bananas  apples  oranges
    3      kiwis     NaN   grapes
    

    【讨论】:

    • 奇妙吧!我正沿着第三条路走下去,陷入了纠结,但我不知道在整个枢轴区域中存在这样的隐喻。谢谢!
    • ^同样,我认为这要复杂得多,也谢谢!
    • @behzad.nouri 您能否将其扩展到您想要保留的其他列?比如让我们说原来的 C 列有一个额外的列?
    • @Tommy 将要保留的列添加到索引中。例如,df.pivot_table(values='val', index=['colA','colB'], columns='key', aggfunc='first')
    【解决方案2】:

    您可以使用set_indexunstack

    In [1923]: df.set_index([df.index, 'key'])['val'].unstack()
    Out[1923]:
    key      bar     baz      foo
    id
    2    bananas  apples  oranges
    3      kiwis    None   grapes
    

    或者,一个简化的groupby

    In [1926]: df.groupby([df.index, 'key'])['val'].first().unstack()
    Out[1926]:
    key      bar     baz      foo
    id
    2    bananas  apples  oranges
    3      kiwis    None   grapes
    

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2021-10-13
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多