如何重组我的Pandas DataFrame,使列名变为列值?

1 投票
1 回答
30 浏览
提问于 2025-04-14 15:42

我现在有一个数据表,长得像这样:

电影 1 电影 2
第一选择 第二选择
第二选择 第一选择

我想把它变成这样:

第一选择 第二选择
电影 1 电影 2
电影 2 电影 1

我找不到办法来重新整理我的数据表,让它像这样交换列名和列值。

我试着遍历每一行,创建一个列表,把列名和它们的值和顺序对应起来,但似乎没有正确工作。

我也试过直接创建新的列,比如第一选择、第二选择等,来抓取列名并用它们作为列值,但总是出错。

1 个回答

1

在这里,我们讨论的是使用 melt 函数,设置 ignore_index=False,以及使用 pivot 函数,但没有指定 index 的情况:

out = (df.melt(ignore_index=False)
         .pivot(columns='value', values='variable')
         .rename_axis(index=None, columns=None)  # optional
      )

还有一种更传统、更详细的替代方法:

out = (df.reset_index().melt('index')
         .pivot(index='index', columns='value', values='variable')
         .rename_axis(index=None, columns=None)
       )

输出结果:

  1st choice 2nd choice
0    Movie 1    Movie 2
1    Movie 2    Movie 1

撰写回答