Python Pandas如何将唯一列值拆分为列并设置指定列为行索引
实现方案
你之前的代码没把Participant维度绑定到分组计数逻辑里,生成的行序号没法和每个参与者的多条作答记录对齐,自然做不到参与者和响应值的匹配,两种可直接跑通的写法如下:
- 修正你原有
cumcount + unstack的写法
之前写cumcount()的时候只按Metric_Category分组,没有把Participant加进分组规则,生成的0、1、2序号是全表维度的计数,和单个参与者的记录不对应。把Participant设为第一层索引、同时加入分组即可:df_result = df2.set_index( [ 'Participant', df2.groupby(['Participant', 'Metric_Category'])['Metric_Category'].cumcount(), 'Metric_Category' ] )['Response'].unstack().reset_index(level=1, drop=True) - 直接用pivot实现(更推荐,代码简洁不容易错)
这种固定的长表转宽表场景,不用自己写计数逻辑,直接调pandas内置的透视接口就行:df_result = df2.pivot( index='Participant', columns='Metric_Category', values='Response' ).reset_index()
如果运行时提示索引重复报错,说明存在同一个参与者对应同一个指标分类有多条响应的情况,把
pivot换成pivot_table即可:单条匹配场景传aggfunc='first'取第一条记录就行,需要合并多条结果可以传aggfunc=list把所有响应值存为列表。
内容的提问来源于stack exchange,提问作者Akshit
相关产品推荐
相关产品推荐

