在 Pandas 中旋转包含表单回复的 table

Pivoting a table containing form replies in Pandas

我有一个包含表单回复的数据框(20 个问题 -> 数据框中的 20 列),如下所示:

Name | Q1         | Q2         | Q3         |  Q4        | ...

A    | Very well  | Quite well | Quite well |Not at all  | ...
B    | Fairly well| Little     | Very Little|Not at all  | ...
C    | Very well  | Quite well | Quite well |Fairly well | ...
 ....

请注意,每个熟练程度级别不一定在每一列中表示。

我想旋转这个 table 以获得如下所示的 table :

Proficiency| Q1         | Q2         | Q3         |  Q4        | ...

Very Little|NaN         | NaN        | B          | NaN        | ...      
Little     | NaN        | B          | ...
Well       | NaN        | 
Quite well | NaN        | A,C        | ...
Fairly well| B          | 
Very  well | A,C        | .......
 ....

基本上我想得到一个 table,其中包含按问题和熟练程度聚集的人员姓名。我尝试使用 pandas pivot_table 函数,但没能得到我需要的东西。

我设法通过迭代原始数据框并创建新数据框来创建 table。但是,我想知道是否有使用一些 pandas 函数的最简单方法。

尝试:

print(
    df.melt("Name").pivot_table(
        index="value", columns="variable", values="Name", aggfunc=", ".join
    )
)

打印:

variable       Q1    Q2    Q3    Q4
value                              
Fairly well     B   NaN   NaN     C
Little        NaN     B   NaN   NaN
Not at all    NaN   NaN   NaN  A, B
Quite well    NaN  A, C  A, C   NaN
Very Little   NaN   NaN     B   NaN
Very well    A, C   NaN   NaN   NaN

df 使用:

  Name           Q1          Q2           Q3           Q4
0    A    Very well  Quite well   Quite well   Not at all
1    B  Fairly well      Little  Very Little   Not at all
2    C    Very well  Quite well   Quite well  Fairly well