熊猫数据框使用列作为行

时间:2018-12-05 18:31:35

标签: python pandas dataframe pivot-table melt

我有一个数据框,其中有一个用于组的列和一个问题答案的列:

   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]

这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您也可以使用unstack

# do unstack
df = df.set_index('Group').unstack().reset_index()

# rename columns
df.columns = ['Group','Question','Answer']