【问题标题】:Slice pandas.DataFrame's second Multiindex切片 pandas.DataFrame 的第二个 Multiindex
【发布时间】: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


【解决方案1】:

诀窍是指定轴...

df.loc(axis=1)[:,0]

提供每个点的第 0 次测量。 由于我在二级索引上使用整数,我不确定这是否真的产生标签“0”或只是 DataFrame 中的第 0 个测量值,标签不可知。

但对于我的用例,这实际上已经足够了。

【讨论】:

  • 要获得第 0 次测量的平均值,首先需要转置:df.loc(axis=1)[:,0].T.mean()
猜你喜欢
  • 2017-03-28
  • 2016-11-11
  • 2023-01-08
  • 2018-12-29
  • 2020-06-29
  • 1970-01-01
  • 2021-01-03
  • 2017-05-08
  • 2014-05-20
相关资源
最近更新 更多