当一列在 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()
我有一个描述试卷的数据集。我想将其与学生获得的分数进行映射并进行分析。为此,我想融化试卷的细节。
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()