【发布时间】:2016-05-20 09:50:19
【问题描述】:
我有一个曾经是数据库格式的数据框(不是我的选择),这可以从本示例中对行而非列的关注中得到证明。
df = pd.DataFrame([['John','Sept',1,'Dec',2],['Jane','Sept',1,'Dec',3],['James','Sept',2,'Dec',2]],columns=['Name','Test 1','Score 1','Test 2','Score 2'])
Name Test 1 Score 1 Test 2 Score 2
0 John Sept 1 Dec 2
1 Jane Sept 1 Dec 3
2 James Sept 2 Dec 2
我想把它转换成这种格式。
Name Test Date Score
0 Joe 1 Sept 1
1 Joe 2 Dec 2
3 Jane 1 Sept 1
4 Jane 2 Dec 3
6 James 1 Sept 2
7 James 2 Dec 2
所以基本上我想合并测试列,以便它们在名称列上分组。到目前为止,我已经查看了 melt() 和 unstack(),这让我得到了我想要的东西:
melt = pd.melt(df,id_vars=['Name','1st Test'])
Name Test 1 variable value
0 John Sept Score 1 1
1 Jane Sept Score 1 1
2 James Sept Score 1 2
3 John Sept Test 2 Dec
4 Jane Sept Test 2 Dec
5 James Sept Test 2 Dec
6 John Sept Score 2 2
7 Jane Sept Score 2 3
8 James Sept Score 2 2
我很确定 groupby、melt 或 unstack 都能让我到达那里,但我就是无法正确使用语法。建议将不胜感激。
背景:我认为(我希望)这种新格式可以让我绘制分数变化与测试时间的关系。
【问题讨论】:
-
配对样本 t 检验在原始格式中会容易得多,它只是
scipy.stats.ttest_rel(df['Score 1'], df['Score 2'])。 -
谢谢,我会调查的!不幸的是,这些人不想要 t 检验,他们想要用 Excel 制作的漂亮图表,以便以后使用,而当前的格式似乎对 Excel 不是特别友好。