【问题标题】:Pandas: break categorical column to multiple columnsPandas:将分类列分成多列
【发布时间】:2015-09-08 12:29:52
【问题描述】:

想象一下以下格式的 Pandas 数据框:

id  type  v1  v2
1   A     6   9
1   B     4   2
2   A     3   7
2   B     3   6

我想将此数据框转换为以下格式:

id  A_v1  A_v2  B_v1  B_v2
1   6     9     4     2
2   3     7     3     6

有没有一种优雅的方式来做到这一点?

【问题讨论】:

    标签: python indexing pandas


    【解决方案1】:

    您可以使用set_indextypeid 列移动到索引中, 然后unstacktype 索引级别移动到列索引中。您不必担心 v 值 - 索引所在的位置决定了值的排列。

    结果是一个带有a MultiIndex 列索引的DataFrame:

    In [181]: df.set_index(['type', 'id']).unstack(['type'])
    Out[181]: 
         v1    v2   
    type  A  B  A  B
    id              
    1     6  4  9  2
    2     3  3  7  6
    

    通常,MultiIndex 比扁平列索引更可取。 它为您提供了更好的方法来根据typev 值选择或操作数据。

    如果您希望重新排列列以完全匹配所需输出中显示的顺序,您可以使用df.reindex:

    df = df.reindex(columns=sorted(df.columns, key=lambda x: x[::-1]))
    

    产量

         v1 v2 v1 v2
    type  A  A  B  B
    id              
    1     6  9  4  2
    2     3  7  3  6
    

    如果您希望将列索引展平为单个级别,那么

    df.columns = ['{}_{}'.format(t, v) for v,t in df.columns]
    

    产量

        A_v1  A_v2  B_v1  B_v2
    id                        
    1      6     9     4     2
    2      3     7     3     6
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2021-02-19
      • 2021-01-24
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      相关资源
      最近更新 更多