how to make indexer expression to slice a Multiindex and select values in python when the choosen indexers are continous integers?
how to make indexer expression to slice a Multilndex and slect values in python when the choosen indexers are continous integers?
我在 python 中使用 MuiliIndexed 数据帧来处理一些带有时间信息的测量数据。
我用'h'作为一级索引的名称,表示数据出现的小时,'min'作为二级索引的名称,表示分钟。当我想获取 10:03 到 10:15 期间或更长持续时间期间的数据平均值时,我找不到合适的表示来切片数据。代码总是出现 SyntaxError: invalid syntax.
数据框如下,命名为'means':
L = 0.96m L = 1.46m
h min
10 3 -0.116562 -0.110844
4 -0.113849 -0.134462
5 -0.140548 -0.132054
6 -0.139505 -0.134903
7 -0.124237 -0.116645
8 -0.119559 -0.120527
9 -0.136731 -0.159849
10 -0.124228 -0.118011
11 -0.137301 -0.124688
12 -0.166075 -0.137226
13 -0.124688 -0.126409
14 -0.129269 -0.126247
15 -0.104269 -0.126129
16 -0.132237 -0.135247
17 -0.124815 -0.148978
18 -0.110742 -0.116591
19 -0.124419 -0.124731
20 -0.117151 -0.135806
21 -0.135688 -0.124796
22 -0.130656 -0.121968
23 -0.142452 -0.141645
24 -0.112304 -0.121370
25 -0.115796 -0.134624
26 -0.126860 -0.122817
27 -0.120161 -0.115043
28 -0.117656 -0.107355
29 -0.127645 -0.138753
30 -0.135054 -0.120380
31 -0.142022 -0.110409
32 -0.132978 -0.115677
...
我现在使用的代码是:
means.loc(axis=0)[10,[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]
有效。
L = 0.96m L = 1.46m
h min
10 3 -0.116562 -0.110844
4 -0.113849 -0.134462
5 -0.140548 -0.132054
6 -0.139505 -0.134903
7 -0.124237 -0.116645
8 -0.119559 -0.120527
9 -0.136731 -0.159849
10 -0.124228 -0.118011
11 -0.137301 -0.124688
12 -0.166075 -0.137226
13 -0.124688 -0.126409
14 -0.129269 -0.126247
15 -0.104269 -0.126129
但是当我为了方便使用下面的代码时:
means.loc(axis=0)[10,[3:14]]
它以 syntaxerror:invalid 语法出现。
那么有没有另一种方便的方法,可以在 pandas 中截取一系列值,而不是列出所有需要的索引器?在从 10:03 到 10:59 的持续时间内获取值的情况下,我很难在 'min' 级别列出所有需要的索引器。
要修复您的直接错误,请尝试:
means.loc(axis=0)[10, slice(3, 14)]
在更一般的层面上,使用 single-level DatetimeIndex 而不是 MultiIndex 可能更容易,因为这将允许您使用 pandas' 日期时间索引和切片功能。
我在 python 中使用 MuiliIndexed 数据帧来处理一些带有时间信息的测量数据。
我用'h'作为一级索引的名称,表示数据出现的小时,'min'作为二级索引的名称,表示分钟。当我想获取 10:03 到 10:15 期间或更长持续时间期间的数据平均值时,我找不到合适的表示来切片数据。代码总是出现 SyntaxError: invalid syntax.
数据框如下,命名为'means':
L = 0.96m L = 1.46m
h min
10 3 -0.116562 -0.110844
4 -0.113849 -0.134462
5 -0.140548 -0.132054
6 -0.139505 -0.134903
7 -0.124237 -0.116645
8 -0.119559 -0.120527
9 -0.136731 -0.159849
10 -0.124228 -0.118011
11 -0.137301 -0.124688
12 -0.166075 -0.137226
13 -0.124688 -0.126409
14 -0.129269 -0.126247
15 -0.104269 -0.126129
16 -0.132237 -0.135247
17 -0.124815 -0.148978
18 -0.110742 -0.116591
19 -0.124419 -0.124731
20 -0.117151 -0.135806
21 -0.135688 -0.124796
22 -0.130656 -0.121968
23 -0.142452 -0.141645
24 -0.112304 -0.121370
25 -0.115796 -0.134624
26 -0.126860 -0.122817
27 -0.120161 -0.115043
28 -0.117656 -0.107355
29 -0.127645 -0.138753
30 -0.135054 -0.120380
31 -0.142022 -0.110409
32 -0.132978 -0.115677
...
我现在使用的代码是:
means.loc(axis=0)[10,[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]
有效。
L = 0.96m L = 1.46m
h min
10 3 -0.116562 -0.110844
4 -0.113849 -0.134462
5 -0.140548 -0.132054
6 -0.139505 -0.134903
7 -0.124237 -0.116645
8 -0.119559 -0.120527
9 -0.136731 -0.159849
10 -0.124228 -0.118011
11 -0.137301 -0.124688
12 -0.166075 -0.137226
13 -0.124688 -0.126409
14 -0.129269 -0.126247
15 -0.104269 -0.126129
但是当我为了方便使用下面的代码时:
means.loc(axis=0)[10,[3:14]]
它以 syntaxerror:invalid 语法出现。 那么有没有另一种方便的方法,可以在 pandas 中截取一系列值,而不是列出所有需要的索引器?在从 10:03 到 10:59 的持续时间内获取值的情况下,我很难在 'min' 级别列出所有需要的索引器。
要修复您的直接错误,请尝试:
means.loc(axis=0)[10, slice(3, 14)]
在更一般的层面上,使用 single-level DatetimeIndex 而不是 MultiIndex 可能更容易,因为这将允许您使用 pandas' 日期时间索引和切片功能。