【发布时间】:2017-06-29 05:08:56
【问题描述】:
我有一个表单的 pandas 数据框
"a" "b" "c" #first level index
0, 1, 2 0, 1, 2 0, 1, 2 #second level index
index
0 1,2,3 6,7,8 5,3,4
1 2,3,4 7,5,4 9,2,5
2 3,4,5 4,5,6 0,4,5
...
表示进行测量的地点(a、b 或 c)以及在该地点发生的测量结果(0、1、2)。
我想做以下事情:
- 在样本中选取一个切片(例如在测量 0 处每个点的第一次测量)
- 平均每个第 i 个测量值 (mean("a"[0], "b"[0], "c"[0]), mean("a"[1], "b"[1], "c"[1]), ...)
我试图掌握 pandas Multiindex 文档的窍门,但没有设法切入第二级。
这是列索引:
MultiIndex(levels=[['a', 'b', 'c', ... , 'y'], [0, 1, 2, ... , 49]],
labels=[[0, 0, 0, ... , 0, 1, 1, 1, ... 1, ..., 49, 49, 49, ... 49]])
还有索引
Float64Index([204.477752686, 204.484664917, 204.491577148, ..., 868.723022461], dtype='float64', name='wavelength', length=43274)
使用
df[:][0]
产生键错误(0 不在索引中)
df.iloc[0]
返回水平切片
0 "a":(1,2,3), "b":(6,7,8), "c":(5,3,4)
但我想拥有
"a":(1,2,3), "b":(6,7,4), "c":(5,9,0)
感谢您的帮助
PS:版本:pandas-0.19、python-3.4
【问题讨论】:
-
如果每个点的测量值相同,我想我可以轮询一个系列中的每个第 x 个。然而事实并非如此。有些点有 49 个测量值,有些只有 47 个(有些已被丢弃)。因此,我想明确指出第二个指标,因为它代表了测量的真实值。
标签: pandas slice multi-index