You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas DataFrame转换为适配Plotly Express绘制条形图的格式

解决方案

转换思路

  • 原始数据为宽表结构,每行代表1位受访者,Q3_3开头的列对应不同选项,值为-99代表受访者未选择该选项,文本值代表选中
  • 先把宽表转为长表,保留受访者类型(Type)字段
  • 过滤掉未选中的无效记录后,按问题和受访者类型分组统计人数,再调整为绘图需要的宽表格式

完整实现代码

import pandas as pd
import plotly.express as px

# 原始DataFrame定义
df = pd.DataFrame({'Q3_3_1': {'R_2cedWe4sx09CKlb': -99.0,
  'R_3smCukGdFbm4i2t': -99.0,
  'R_3Oj484bqZHepbmT': -99.0,
  'R_2Wxyhyo1ZtxL0f6': -99.0,
  'R_eh84KSBtWy9OWZ3': -99.0,
  'R_1pndKdTJ0GC0crY': -99.0,
  'R_3MF4nebUAJ130N1': -99.0,
  'R_1rrd0yEcpoziBXX': 'I have not attended a course on entrepreneurship so far.',
  'R_3J3ZATf90VmSonA': 'I have not attended a course on entrepreneurship so far.',
  'R_aaP0vu2FJGdIrNT': -99.0},
 'Q3_3_2': {'R_2cedWe4sx09CKlb': -99.0,
  'R_3smCukGdFbm4i2t': -99.0,
  'R_3Oj484bqZHepbmT': 'I have attended at least one entrepreneurship course as elective.',
  'R_2Wxyhyo1ZtxL0f6': -99.0,
  'R_eh84KSBtWy9OWZ3': -99.0,
  'R_1pndKdTJ0GC0crY': -99.0,
  'R_3MF4nebUAJ130N1': -99.0,
  'R_1rrd0yEcpoziBXX': -99.0,
  'R_3J3ZATf90VmSonA': -99.0,
  'R_aaP0vu2FJGdIrNT': 'I have attended at least one entrepreneurship course as elective.'},
 'Q3_3_3': {'R_2cedWe4sx09CKlb': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_3smCukGdFbm4i2t': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_3Oj484bqZHepbmT': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_2Wxyhyo1ZtxL0f6': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_eh84KSBtWy9OWZ3': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_1pndKdTJ0GC0crY': -99.0,
  'R_3MF4nebUAJ130N1': 'I have attended at least one entrepreneurship course as compulsory part of my studies.',
  'R_1rrd0yEcpoziBXX': -99.0,
  'R_3J3ZATf90VmSonA': -99.0,
  'R_aaP0vu2FJGdIrNT': -99.0},
 'Q3_3_4': {'R_2cedWe4sx09CKlb': -99.0,
  'R_3smCukGdFbm4i2t': -99.0,
  'R_3Oj484bqZHepbmT': -99.0,
  'R_2Wxyhyo1ZtxL0f6': -99.0,
  'R_eh84KSBtWy9OWZ3': -99.0,
  'R_1pndKdTJ0GC0crY': 'I am studying in a specific program on entrepreneurship.',
  'R_3MF4nebUAJ130N1': -99.0,
  'R_1rrd0yEcpoziBXX': -99.0,
  'R_3J3ZATf90VmSonA': -99.0,
  'R_aaP0vu2FJGdIrNT': -99.0},
 'Q3_3_5': {'R_2cedWe4sx09CKlb': -99.0,
  'R_3smCukGdFbm4i2t': -99.0,
  'R_3Oj484bqZHepbmT': -99.0,
  'R_2Wxyhyo1ZtxL0f6': -99.0,
  'R_eh84KSBtWy9OWZ3': -99.0,
  'R_1pndKdTJ0GC0crY': -99.0,
  'R_3MF4nebUAJ130N1': -99.0,
  'R_1rrd0yEcpoziBXX': -99.0,
  'R_3J3ZATf90VmSonA': -99.0,
  'R_aaP0vu2FJGdIrNT': -99.0},
 'Type': {'R_2cedWe4sx09CKlb': 'student',
  'R_3smCukGdFbm4i2t': 'nascent',
  'R_3Oj484bqZHepbmT': 'nascent',
  'R_2Wxyhyo1ZtxL0f6': 'student',
  'R_eh84KSBtWy9OWZ3': 'student',
  'R_1pndKdTJ0GC0crY': 'student',
  'R_3MF4nebUAJ130N1': 'student',
  'R_1rrd0yEcpoziBXX': 'nascent',
  'R_3J3ZATf90VmSonA': 'student',
  'R_aaP0vu2FJGdIrNT': 'active'}})

# 数据转换步骤
# 1. 宽表转长表,保留受访者类型字段
melted_df = df.melt(id_vars='Type', 
                    value_vars=['Q3_3_1', 'Q3_3_2', 'Q3_3_3', 'Q3_3_4', 'Q3_3_5'],
                    var_name='Question', 
                    value_name='Answer')
# 2. 过滤未选中该选项的无效记录(值为-99)
filtered_df = melted_df[melted_df['Answer'] != -99]
# 3. 分组统计人数并调整为目标格式
df1 = filtered_df.groupby(['Question', 'Type']).size().unstack(fill_value=0).reset_index()
# 按需求调整列顺序
df1 = df1[['Question', 'student', 'nascent', 'active']]

# 绘图
fig = px.bar(df1, x='Question', y=['student', 'nascent','active'], barmode='group', title='Final Term')
fig.show()

内容的提问来源于stack exchange,提问作者fredooms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:27:04