重塑df的最佳方式是什么,以便它基于列名的相似性堆叠列,同时将列名的唯一ID部分保留在新列中?你知道吗
我有一个类似于以下的df(我的实际数据还包括需要保留的NaN值):
df = pandas.DataFrame({"RX_9mm": scipy.randn(5), "RY_9mm": scipy.randn(5),"TX_9mm": scipy.randn(5), "TY_9mm": scipy.randn(5), "RX_10mm": scipy.randn(5), "RY_10mm": scipy.randn(5),"TX_10mm": scipy.randn(5), "TY_10mm": scipy.randn(5), "time": range(5)})
RX_9mm RY_9mm TX_9mm TY_9mm RX_10mm RY_10mm TX_10mm TY_10mm time
0 -0.1444 2.1319 1.9665 0.1773 0.5156 -1.8461 0.9122 1.1285 0
1 1.4831 -0.8773 -1.0112 -0.0010 1.4532 -1.3721 0.6894 -0.1781 1
2 0.3685 0.2148 -1.2216 0.0098 -1.1427 -0.1851 0.3890 0.9552 2
3 0.6843 -2.0279 -1.1342 -0.8869 0.2718 -2.4857 -1.0496 -0.4286 3
4 -1.5625 -0.2733 -0.1243 -1.2248 -0.7403 -0.5840 0.1797 -0.7014 4
但是我需要它看起来像这样:
RX RY TX TY time ID
0 -0.1444 2.1319 1.9665 0.1773 0 9mm
1 1.4831 -0.8773 -1.0112 -0.0010 1 9mm
2 0.3685 0.2148 -1.2216 0.0098 2 9mm
3 0.6843 -2.0279 -1.1342 -0.8869 3 9mm
4 -1.5625 -0.2733 -0.1243 -1.2248 4 9mm
5 0.5156 -1.8461 0.9122 1.1285 0 10mm
6 1.4532 -1.3721 0.6894 -0.1781 1 10mm
7 -1.1427 -0.1851 0.3890 0.9552 2 10mm
8 0.2718 -2.4857 -1.0496 -0.4286 3 10mm
9 -0.7403 -0.5840 0.1797 -0.7014 4 10mm
我试着使用以下来自changshe的“基于列标签重塑pandas中的数据帧”示例的代码
但是,当我使用以下代码时:
id = df.ix[:, ['time']]
df.columns = pandas.MultiIndex.from_tuples([tuple(c.split('_')) for c in df.columns])
pandas.merge(df.stack(0).reset_index(1), id, left_index=True, right_index=True)
我得到:
RX RY TX TY RX RY TX TY time
9mm 9mm 9mm 9mm 10mm 10mm 10mm 10mm NaN
0 -0.1444 2.1319 1.9665 0.1773 0.5156 -1.8461 0.9122 1.1285 0
1 1.4831 -0.8773 -1.0112 -0.0010 1.4532 -1.3721 0.6894 -0.1781 1
2 0.3685 0.2148 -1.2216 0.0098 -1.1427 -0.1851 0.3890 0.9552 2
3 0.6843 -2.0279 -1.1342 -0.8869 0.2718 -2.4857 -1.0496 -0.4286 3
4 -1.5625 -0.2733 -0.1243 -1.2248 -0.7403 -0.5840 0.1797 -0.7014 4
我知道新列是多层次的,带有度量(RX,RY等)和ID(9mm,10mm)级别,但是我不知道如何将度量叠加到相同的列中,同时保持ID作为新列。你知道吗
如果有人能解释一下我的错误是为了得到这个输出而不是堆积的列,我会非常感激的。你知道吗
谢谢
您可以简化您的解决方案,最后一个} 将列
merge
不是必需的,因为在第一步中,^{time
转换为index
:如果希望更改列的顺序,可以使用^{} :
相关问题 更多 >
编程相关推荐