python - Pandas 数据框使用列作为行

标签 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]

最好的方法是什么?

最佳答案

融化

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

关于python - Pandas 数据框使用列作为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638623/

相关文章:

python - Pandas:使用日期列表和 DateTimeIndex 访问数据

python - Pandas:数据帧错误 - 传递了 2 列,传递的数据有 3 列

python - 计算numpy中两个向量之间的成对差异?

python - XPath 表达式在网站上不起作用

python: pandas: 过滤一列并获取另一列的平均值

python - 我可以使用 groupby 在 Pandas 数据框中创建每行都是运行列表的列吗?

python - 在 Python 中从数据库中删除

python - 我有模数和私有(private)指数。如何构造RSA私钥并对消息进行签名?

python - 从终端运行脚本时 Altair 不显示图表?

pandas 平均每行大小为 5 的 block