我尝试使用Pandas来表示运动捕获数据,其中N个标记中的每个标记的(x,y,z)位置具有T个测量值。例如,T=3和N=4,原始CSV数据如下所示:
T,Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz,Dx,Dy,Dz
0,1,2,1,3,2,1,4,2,1,5,2,1
1,8,2,3,3,2,9,9,1,3,4,9,1
2,4,5,7,7,7,1,8,3,6,9,2,3
这真的很容易加载到DataFrame中,我已经学会了一些简单的技巧(例如,将标记数据转换为z分数,或计算速度)。
不过,我想做的一件事是将上面显示的“平面”数据转换为在列(标记)上具有层次索引的格式,以便在级别0有N列(每个标记一列),并且其中每个列在级别1有3列(x,y和z各一列)。
A B C D
x y z x y z x y z x y z
0 1 2 1 3 2 1 4 2 1 5 2 1
1 8 2 3 3 2 9 9 1 3 4 9 1
2 4 5 7 7 7 1 8 3 6 9 2 3
我知道如何通过加载平面文件然后直接操作Series对象来实现这一点,可能是通过使用append
或使用手动创建的MultiIndex创建新的DataFrame。
作为一个Pandas学习者,感觉一定有一种方法可以用更少的努力做到这一点,但很难发现。有没有更简单的方法?
1条答案
按热度按时间zbdgwd5y1#
在本例中,您基本上只需要操作列名。
从原始的DataFrame开始(和一个微小的索引操作):
因此:
然后简单地为列创建一个元组列表,并使用
MultiIndex.from_tuples
: