python - 当一列在熊猫中有两个变量值时,如何融化数据框?
问题描述
我有一个描述试卷的数据集。我想将其与学生获得的分数进行映射并进行一些分析。为此,我想融化试卷的细节。
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。
编辑
如果PO列中“段”的数量可以变化,则只需稍作更改。不要按名称重命名“新”列,而是添加前缀:
qns = qns.join(qns.PO.str.split(',', expand=True)\
.add_prefix('PO_')).drop(columns='PO')
但请注意,这次有些列可以有None值,因此要将它们从熔化结果中排除,请将.dropna()添加到熔化指令:
qns.melt(id_vars = ["Question", "Marks"]).dropna()
推荐阅读
- selenium - selenium c#等待使用元素名称而不是定位器(By.Id)
- python - 如何对数组进行批量计算
- reactjs - 打开一个
通过单击在另一个组件中呈现的元素 - asp.net-core - .NET Core 2.1 MVC 身份授权 - 不同部分的不同用户角色
- javascript - 从数据库中设置重复字段的值
- python - Python - 熊猫直方图宽度
- javascript - 如何在 TSX 中将值从子组件传递给父组件?
- python - Pyqt gui,带有放置在背景图像上的按钮和数字指示器
- python - git clone 的 Python 进度条
- tfs - TFS 自动构建:Nuget Pack 失败并显示代码 (1)