首页 > 解决方案 > 需要根据列分组将数据框行数据转换为列

问题描述

我有一个 CSV 文件,其中包含用户及其问题和答案,用于对工作申请进行预筛选问题。在某些情况下,给定的问题可以有多个答案。以下是 CSV 当前的外观:

User,RequisitionID,Question,Answer
user1,190004116,6162,7296
user2,190004086,6115,7260
user2,190004086,6117,7264
user2,190004086,6117,7265
user2,190004086,6117,7268
user2,190004086,6117,7269
user3,190005321,6321,4221
user3,190005321,6321,4322

而不是上述格式,我希望将答案数据表示在单独的列中(每个问题的不同答案的列数一样多),按用户、申请 ID 和问题分组,如下所示:

User,RequisitionID,Question,Answer1,Answer2,Answer3,Answer4
user1,190004116,6162,7296,,,
user2,190004086,6115,7260,,,
user2,190004086,6117,7264,7265,7268,7269
user3,190005321,6321,4221,4321,

我已经尝试使用如下的“groupby”,但我无法获得我想要的形状的结果数据框......

reqPrscrAnsFileFiltered = reqPrscrAnsFileFiltered.groupby(['User','RequisitionID','Question']).Answer.apply(list)
reqPrscrAnsFileFiltered = pandas.DataFrame(reqPrscrAnsFileFiltered.tolist(), index=reqPrscrAnsFileFiltered.index)

抱歉,但我是 Python 和 Pandas 的新手,所以任何帮助都会很棒。

好吧 - 我们快到了。我实现了您在评论中提供的 pivot_table 代码片段,但恐怕我不确定您对折叠 Multiindex 的意思。不这样做,Dataframe 输出如下:

Answer,Answer,Answer,Answer
1,2,3,4
7296.0,,,
7260.0,,,
7264.0,7265.0,7268.0,7269.0
4221.0,4322.0,,  

你能帮我理解如何使它看起来像我的帖子中所需的输出吗?具体来说,我想删除带有答案索引号 (1,2,3,4) 的行,然后在答案列左侧的 User、RequisitionID 和 Question 的缺失列中添加回。抱歉,如果这是基本的东西...

标签: python-3.xpandas

解决方案


推荐阅读