【发布时间】:2020-04-05 04:33:09
【问题描述】:
我有调查数据。该调查提出一个问题,受访者为每个问题选择一个或多个给定类别。然后,该调查会询问人口统计问题,例如性别。输出是一个数据框,其中人口统计信息作为列,每个问题中每个类别的 0 和 1 矩阵(0 = 未选中,1 = 选中)。
为了帮助您更好地理解这看起来像我有以下数据框:
df = pd.DataFrame({'Survey ID': [1,2,3],
'Q1_Topic A': [0,1,1],
'Q1_Topic B': [1,0,1],
'Q1_Topic C': [1,0,0],
'Q2_Topic X': [0,0,1],
'Q2_Topic Y': [0,1,0],
'Q2_Topic Z': [0,0,1],
'Gender': ['Male', 'Female', 'Male']
})
print(df)
我需要转换此数据框,以根据选择的类别数量为每个问题显示一列,并为每个调查显示多行。每一行都应该在相关问题列下有一个类别。
困惑了吗?很难解释,但数据应该是这样的
df2 = pd.DataFrame({'Survey ID': [1,1,2,3,3],
'Q1': ['B','C','A','A','B'],
'Q2': [float('nan'), float('nan'), 'Y', 'X', 'Z'],
'Gender': ['Male', 'Male', 'Female', 'Male', 'Male']
})
print(df2)
基本上我需要将 df 转换为 df2。 注意:每个列标签的问题和主题都有一个通用的分隔符“_”。
一如既往,非常感谢您在高级方面的帮助。如果没有这个社区,我有时会被严重卡住,但我通过这个平台学到了很多东西。
【问题讨论】:
-
Q2_Topic A 来自哪里?这是什么逻辑?
-
抱歉,这是打字机。问题 2 现在有 X、Y 和 Z 类别。基本上每个问题都有独特的类别可供选择。如果他们选择了一个类别,则为 1,否则为 0
标签: python pandas dataframe pivot transform