当一列在 pandas 中有两个变量值时如何融化数据框?

How to melt dataframe when a column has two values for a variable in pandas?

我有一个描述试卷的数据集。我想将其与学生获得的分数进行映射并进行分析。为此,我想融化试卷的细节。

 Question   Marks   BL  PI  CO  PSO PO
0   Q1  2   2   1.4 1   1   1,2
1   Q2  2   3   2.1 2   1   1,2
2   Q3  2   2   1.1 1   1   1,2
3   Q4  2   2   1.1 1   1   1,2
4   Q5  4   2   1.1 1   1   1,2

我试过了

qns = pd.read_csv('https://raw.githubusercontent.com/davidrajdgl/CodeSnippets/master/questions.tsv', sep="\t")
qns_melted = qns.melt(id_vars = ["Question", "Marks"])
qns_melted

但这似乎没有帮助,因为我希望通过拆分列来生成值列,其中单元格值中有一个逗号。

例如,

Q1  2   PO  1
Q1  2   PO  2

如何实现?

可能的选项之一是:

  • PO 列拆分为 2 个新列,
  • 根据需要重命名它们,
  • 删除原来的 PO 列。

要执行此操作,运行:

qns = qns.join(qns.PO.str.split(',', expand=True)\
    .rename(columns={0: 'PO_1', 1: 'PO_2'})).drop(columns='PO')

然后你可以融化这个DataFrame。

编辑

如果"segments"在PO栏中的数量可以变化,只有一点点变化 是需要的。不要按名称重命名 "new" 列,而是添加前缀:

qns = qns.join(qns.PO.str.split(',', expand=True)\
    .add_prefix('PO_')).drop(columns='PO')

但注意这次有些列可以有None值,所以要排除 他们从 melt 结果中,添加 .dropna()melt 指令:

qns.melt(id_vars = ["Question", "Marks"]).dropna()