Python Pandas:统一DataFrame列选项排序并补全缺失选项求助
解决方案
原代码的问题在于value_counts()默认只返回当前列中实际出现的选项,且按计数降序排列,所以会出现排序混乱、缺失指定选项的情况。要实现统一排序并补全缺失项,你可以通过预定义目标选项顺序+索引对齐的方式解决:
修改后的代码
import pandas as pd # 定义统一的选项顺序,按你需要的yes、no、Don't know排列 desired_order = ['yes', 'no', "Don't know"] li = [] # 直接遍历列名,比用range更直观 for col in df.columns: # 获取列的统计结果,用reindex对齐到目标顺序,缺失项填充0 vc = df[col].value_counts(dropna=False).reindex(desired_order, fill_value=0) # 转换为DataFrame并重置索引,重命名列名让结果更清晰 vc_df = vc.to_frame().reset_index() vc_df.columns = ['选项', col] # 列名可根据需求修改 li.append(vc_df)
关键步骤说明
desired_order:固定所有列的输出顺序,确保每列严格按照yes→no→Don't know排列reindex(desired_order, fill_value=0):核心操作,将统计结果的索引强制对齐到目标顺序,原列中不存在的选项会自动添加,计数填充为0dropna=False:如果数据里有NaN值,这个参数会把NaN也统计进去;不需要统计NaN的话可以去掉该参数
可选:合并所有统计结果为一个DataFrame
如果想把列表里的多个小DataFrame合并成统一的统计表格,可使用pd.concat:
final_stats = pd.concat([df.set_index('选项') for df in li], axis=1).reset_index()
内容的提问来源于stack exchange,提问作者user16239103
相关产品推荐
相关产品推荐

