【问题标题】:Pandas dataframe use columns as rows [duplicate]熊猫数据框使用列作为行[重复]
【发布时间】:2019-05-07 09:29:45
【问题描述】:

我有一个数据框,其中包含一组列和问题答案列:

   Group Q1 Q2 Q3 Q4
0      1  A  B  C  6
1      1  B  C  A  A
2      1  E  F  V  A
3      2  R  T  Y  O
4      2  M  Z  D  F

我想将问题的列移动/融化/折叠到行,因此所需的数据框将如下所示:

   Group Question Answer
0      1       Q1      A
1      1       Q1      B
2      1       Q1      R
3      1       Q2      B
4      1       Q2      C
5      1       Q2      F

.. .. 以此类推,直到最后一行:

[2    Q4     F]

最好的方法是什么?

【问题讨论】:

    标签: python pandas dataframe pivot-table melt


    【解决方案1】:

    melt

    df.melt('Group', var_name='Question', value_name='Answer')
    
        Group Question Answer
    0       1       Q1      A
    1       1       Q1      B
    2       1       Q1      E
    3       2       Q1      R
    4       2       Q1      M
    5       1       Q2      B
    6       1       Q2      C
    7       1       Q2      F
    8       2       Q2      T
    9       2       Q2      Z
    10      1       Q3      C
    11      1       Q3      A
    12      1       Q3      V
    13      2       Q3      Y
    14      2       Q3      D
    15      1       Q4      6
    16      1       Q4      A
    17      1       Q4      A
    18      2       Q4      O
    19      2       Q4      F
    

    理解

    pd.DataFrame([
        (g, q, a)
        for g, *A in zip(*map(df.get, df))
        for q, a in zip([*df][1:], A)
    ], columns=['Group', 'Question', 'Answer'])
    
        Group Question Answer
    0       1       Q1      A
    1       1       Q2      B
    2       1       Q3      C
    3       1       Q4      6
    4       1       Q1      B
    5       1       Q2      C
    6       1       Q3      A
    7       1       Q4      A
    8       1       Q1      E
    9       1       Q2      F
    10      1       Q3      V
    11      1       Q4      A
    12      2       Q1      R
    13      2       Q2      T
    14      2       Q3      Y
    15      2       Q4      O
    16      2       Q1      M
    17      2       Q2      Z
    18      2       Q3      D
    19      2       Q4      F
    

    【讨论】:

      【解决方案2】:

      你也可以使用unstack

      # do unstack
      df = df.set_index('Group').unstack().reset_index()
      
      # rename columns
      df.columns = ['Group','Question','Answer']
      

      【讨论】:

        猜你喜欢
        • 2021-10-28
        • 2019-12-28
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        • 2017-05-10
        • 2022-01-27
        • 2019-09-30
        • 1970-01-01
        相关资源
        最近更新 更多