解决DataFrame拆列(unstack)后出现空值的问题
解决DataFrame转置模型响应列时的空值问题
你的代码出现空值的核心原因是:groupby后未做聚合操作就直接unstack,导致不同模型的行索引无法对齐,最终产生缺失值。以下是几种修正方案:
方案1:使用pivot(适用于每个分组-模型组合唯一的场景)
假设你的原DataFrame有唯一标识行的列(比如Question、ID),直接用pivot将模型作为列,自动对齐响应内容:
# 假设用Question作为行标识,替换成你实际的列名 df_new = df.pivot(index='Question', columns='Model', values='Model_Response').reset_index() # 如果存在部分模型无响应的情况,可填充默认值 df_new = df.pivot(index='Question', columns='Model', values='Model_Response', fill_value='无响应').reset_index()
方案2:使用pivot_table(适用于存在重复分组-模型组合的场景)
如果同一分组下同一模型有多条响应,可指定聚合规则(如取第一条、合并内容),同时填充空值:
# 取每个分组-模型组合的第一条响应,空值填充为空字符串 df_new = df.pivot_table( index='Question', # 替换为你的行标识列 columns='Model', values='Model_Response', aggfunc='first', # 也可以用'last'、lambda x: ','.join(x)合并多内容 fill_value='' ).reset_index()
方案3:修正你原有的groupby+unstack代码
先对分组后的内容做聚合,再转置,最后填充空值:
# 按行标识(如Question)和Model分组,取第一条响应 df_grouped = df.groupby(['Question', 'Model'])['Model_Response'].first() # 转置为列并排序,填充空值 df_new = df_grouped.unstack('Model').sort_index(axis=1).fillna('')
内容的提问来源于stack exchange,提问作者user_04248753498
相关产品推荐
相关产品推荐

