如何将DataFrame中Day列的层级提取为新列并绘制Day1-Day2图形
数据转换与可视化解决方案
1. 数据重塑步骤
要将原始DataFrame中的Day层级转为独立列,核心是通过组内序号标记+透视转换实现同Diet下Day1和Day2样本的一一对应:
代码实现
import pandas as pd # 构建原始DataFrame raw_data = { 'Day': [1, 1, 1, 1, 2, 2, 2, 2], 'Diet': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'], 'weight': [52, 50, 25, 30, 26, 10, 15, 34] } df = pd.DataFrame(raw_data) # 给每个(Diet, Day)组添加组内序号,确保样本匹配关系 df['sample_idx'] = df.groupby(['Diet', 'Day']).cumcount() # 透视转换:将Day转为列,以Diet和样本序号为索引 pivoted = df.pivot(index=['Diet', 'sample_idx'], columns='Day', values='weight').reset_index() # 整理列名和顺序,得到目标格式 final_df = pivoted.rename(columns={1: 'Day1', 2: 'Day2'})[['Day1', 'Day2', 'Diet']] print(final_df)
输出结果
Day1 Day2 Diet 0 52 26 A 1 50 10 A 2 25 15 B 3 30 34 B
2. Day1 vs Day2 可视化
使用matplotlib绘制散点图,按Diet区分样本颜色,直观展示两天体重的关联:
代码实现
import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) # 按Diet分组绘制散点 for diet_group in final_df['Diet'].unique(): group_data = final_df[final_df['Diet'] == diet_group] plt.scatter(group_data['Day1'], group_data['Day2'], label=f'Diet {diet_group}', s=120, alpha=0.8) # 设置图表属性 plt.xlabel('Day 1 Weight') plt.ylabel('Day 2 Weight') plt.title('Weight Comparison: Day 1 vs Day 2') plt.legend() plt.grid(linestyle='--', alpha=0.7) plt.show()
图表说明
- X轴为Day1的体重,Y轴为Day2的体重
- 不同颜色代表不同Diet组,可清晰观察两组样本的体重变化趋势
内容的提问来源于stack exchange,提问作者user23380420
相关产品推荐
相关产品推荐

